.net core 中的配置依赖注入

Xam*_*Dev 5 c# dependency-injection .net-core asp.net-core

我试图通过在 .net core 项目中的类中获取配置来注入依赖项。我尝试注入依赖项的类位于另一个项目中。但不知何故,我无法从注入的依赖项中的配置文件中获取值。下面是我的代码

在下面的 DBContext 中,我需要从配置中获取值,其中我使用了 DBConfiguration 类的 DI。

public class DBContext : DbContext
    {
        private readonly DBConfiguration _dBConfiguration;

        public DBContext(DBConfiguration dBConfiguration)
        {
            _dBConfiguration = dBConfiguration;
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(_dBConfiguration.ConnectionString);
            base.OnConfiguring(optionsBuilder);
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }
    }
Run Code Online (Sandbox Code Playgroud)

以及我的 Web api 中的 StartUp.cs 文件

public void ConfigureServices(IServiceCollection services)
        {
            services.AddScoped<DBConfiguration>();

            services.AddEntityFrameworkSqlServer().AddDbContext<DBContext>();

            services.AddOptions();

            services.Configure<DBConfiguration>(Configuration.GetSection("DBConfiguration"));

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }
Run Code Online (Sandbox Code Playgroud)

和我的 appsettings.json 文件

{
  "DBConfiguration": {


         "ConnectionString": "Server=myserver;Database=BaseProjectDB;Trusted_Connection=True;MultipleActiveResultSets=true",
         "ApplicationName": "WebAPI"


  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}
Run Code Online (Sandbox Code Playgroud)

对此有任何帮助表示赞赏!

Boj*_*hev 6

当您在 DBContext 中注入 DBConfiguration 时,您似乎在 StartUp 文件中使用 DBConfigurationOptions 。

这就是我目前使用配置的方式:

public class Startup
{
    private readonly IConfiguration _configuration;

    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddEnvironmentVariables();

        _configuration = builder.Build();
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<DBConfigurationOptions>(_configuration.GetSection("DBConfiguration"));
    }
}
Run Code Online (Sandbox Code Playgroud)

然后将其注入为:

public class DBContext : DbContext
{
    private readonly DBConfigurationOptions _dBConfiguration;

    public DBContext(IOptions<DBConfigurationOptions> dBConfiguration)
    {
        _dBConfiguration = dBConfiguration.Value;
    }
}
Run Code Online (Sandbox Code Playgroud)