appsettings.json 中一个界面内的配置界面

Configuration Interface inside an interface in 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; }
}

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

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

我试图通过依赖注入来实例化它,然后我收到如下错误消息。

System.InvalidOperationException: 'Cannot create instance of type 'Logger.IFileLoggerConfiguration' because it is either abstract or an interface.'

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

appsettings.json 的值如下

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

这是不可能的,你确实需要改变class结构(只使用classes,没有接口)或者自己用嵌套对象构造对象。

可在此处找到类似的问题和答案: