簡體   English   中英

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:“無法創建類型為‘Logger.IFileLoggerConfiguration’的實例,因為它是抽象的或接口的。”

我知道我在這里嘗試實例化接口是錯誤的。 我找不到擺脫這個的方法。 有人建議如何在從 appsettings.json 獲取時將 IFileLoggerConfiguration 注入 ILoggerConfiguration 中嗎?

appsettings.json 的值如下

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

這是不可能的,你確實需要改變 class 結構(只使用類,沒有接口)或者自己構造 object 嵌套 object 。

可以在這里找到一個類似的問題+答案: 選項模式 - 接口/抽象屬性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM