簡體   English   中英

通過.Net Core中的依賴注入,將接口映射到具有加載配置的類

[英]Mapping Interface to conrecte class with loaded configuration via dependency injection in .Net Core

我已經為ServiceCollection編寫了一個擴展,我想在其中配置我的EntityFramework Core配置和相應的DbContext。 通過json文件加載configuarion工作。 現在,我正在努力的部分是我想將我的IInstanceConfiguration映射到我的OracleConfiguration ,作為一個完整的實例。 我目前的解決方案是這樣的。 我添加了兩條評論,我想知道實現這個的正確(/更好)方法。

親切的問候!

public static void RegisterEfCoreOracle<T>(this IServiceCollection services, string configurationDirectory, string configurationFile) where T : DbContext
    {
        //Adding configuration file
        IConfiguration configuration = new ConfigurationBuilder()
            .SetBasePath(configurationDirectory)
            .AddJsonFile(configurationFile, optional: false)
            .Build();

        services.Configure<OracleConfiguration>(configuration);

        //Do i really have to do it manually this way? What would be another, elegant way?
        var oraInstance = new OracleConfiguration(configuration.GetValue<string>("Name"), configuration.GetValue<string>("DataSource"), configuration.GetValue<string>("UserId"),
            configuration.GetValue<string>("Password"),configuration.GetValue<bool>("UseConsoleLogging"), configuration.GetValue<string>("Compatibility"));

        //This is the line where I am struggling.
        services.AddSingleton<IInstanceConfiguration, OracleConfiguration>(oraInstance);

        var oraConfig = services.ReturnServiceProvider().GetRequiredService<OracleConfiguration>();
        services.AddDbContext<T>();
    }

    public static ServiceProvider ReturnServiceProvider(this IServiceCollection services) => services.BuildServiceProvider();

var oraInstance行完全沒必要,行services.Configure<OracleConfiguration>(configuration); 應按預期設置依賴注入。

如果你注入的類型特別是期望IInstanceConfiguration而不是具體的OracleConfiguration ,你可以像這樣注冊它:

services.AddSingleton<IInstanceConfiguration>(sp => 
    sp.GetRequiredService<OracleConfiguration>());

否則,如果您可以控制它所注入的類型,最好完全刪除IInstanceConfiguration接口,並讓它接受IOptions<OracleConfiguration>

暫無
暫無

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

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