appsettings.json中接口内的配置接口



我设计一个基本的记录器只是为了教育目的,我在下面以这种方式设计了配置界面

public interface ILoggerConfiguration
{
string LoggingPattern { get; set; }
IFileLoggerConfiguration FileLogger { get; set; }
}  

public interface IFileLoggerConfiguration
{
string FileName { get; set; }
string DirectoryName { get; set; }
string FileExtension { get; set; }
}

public class LoggerConfiguration : ILoggerConfiguration
{
string LoggingPattern { get; set; }
IFileLoggerConfiguration FileLogger { get; set; }
}

public class FileLoggerConfiguration : IFileLoggerConfiguration
{
string FileName { get; set; }
string DirectoryName { get; set; }
string FileExtension { get; set; }
}

这些都存在于我创建的记录器库(这是一个类库(中,在ASP.net核心项目中,我尝试如下调用。

services.AddSingleton<ILoggerConfiguration, LoggerConfiguration>(_ =>
Configuration
.GetSection(nameof(LoggerConfiguration))
.Get<LoggerConfiguration>());

我试图通过依赖注入来实例化它,然后我得到了一条错误消息,如下所示。

System.InvalidOperationException:'无法创建类型的实例"Logger.IFileLoggerConfiguration",因为它是抽象的或接口。'

我知道我试图在这里实例化接口是错误的。我找不到摆脱困境的方法。有人有什么建议吗?在从appsettings.json获取时,如何在ILoggerConfiguration中注入IFileLoggerConfiguration?

appsettings.json的值如下

"LoggerConfiguration": {
"LoggingPattern": "Message|Date|LogLevel",
"FileLogger": {
"FileName": "Test it",
"DirectoryName": "D:\Logger",
"FileExtension": ".log"
}
}

这是不可能的,您确实需要更改类结构(只使用类,不使用接口(或自己用嵌套对象构造对象。

类似的问题+答案可以在这里找到:选项模式-接口/抽象属性