代码之家  ›  专栏  ›  技术社区  ›  Caverman

从依赖注入获取记录器和配置?

  •  0
  • Caverman  · 技术社区  · 6 年前

    从这个问题可以看出,我还是一个使用.Net核心的新手,并且对依赖注入有了解。

    我创建了一个名为AppHost的类,其中有一个名为Run()的函数。在我的程序.cs我设置DI,然后调用AppHost。运行()来执行我的主代码。

    程序.cs

    var host = Host.CreateDefaultBuilder().ConfigureServices((context, services) =>
                    {
                        services.AddTransient<IAppHost, AppHost>();
                        services.AddTransient<IFileManager, FileManager>();
                        services.AddTransient<IDataManager, DataManager>();
    
                        services.AddLogging(builder =>
                        {
                            builder.AddNLog("nlog.config");
                        });
                    }).Build();
    
    var svc = ActivatorUtilities.CreateInstance<AppHost>(host.Services);
    svc.Run();
    

    private void CheckEmailAddresses()
    {
    DataManager oDataManager = new DataManager();
    
    var listEmployees = new List<Employee>();
    listEmployees = oDataManager.GetActiveEmployees();
    }
    

    数据管理器.cs

    public class DataManager : IDataManager
        {
            private readonly ILogger<DataManager> _log;
            private readonly IConfiguration _configuration;
    
            public DataManager(ILogger<DataManager> log, IConfiguration config)
            {
                _log = log;
                _configuration = config;
            }
    }
    
    0 回复  |  直到 6 年前
        1
  •  2
  •   Muhammad Hannan    6 年前

    您已经在DI依赖项中注册了IDataManager。所以,与其这么做 new 你需要改变你的 CheckEmailAddresses 这样地。

    private void YouClassName()
    {
     private readonly IDataManager _dataManager;
     public YouClassName(IDataManager dataManager)
     {
       _dataManager = dataManger.
     }
    
     private void CheckEmailAddresses()
     {
       var listEmployees = new List<Employee>();
       listEmployees = _dataManager.GetActiveEmployees();
     }
    }
    

    IDataManager 你的类和其他依赖项 Logger 将自动生成。