依赖注入:在 .Net Core 2.0 中注入配置

Dependency Injection: Injecting configuration in .Net Core 2.0

我正在将一些旧软件迁移到 .Net core 2.0 ...

我想从基础 class...

向我的 class DBActivityRepository 中注入一个连接字符串

是不是只需要在创建base的时候传配置就可以了class

this._DBHandler = new DBHandler(configuration);

还是这样更好:

private DBHandler _DBHandler;
private string connectionString;
public DBActivityRepository(IConfiguration configuration) : base(configuration)
{
    // **Do I need this?**
    this._DBHandler = new DBHandler(configuration);
    connectionString = this._DBHandler.GetConnectionString();
}

谢谢

对于 asp.net 核心中的依赖注入,您需要使用内置的 DI 引擎。 首先,您需要创建 appsetting.json.

"ConnectionStrings": {
    "NameOfContext":"server=localhost;userid=root;password=password;"
}

其次,为连接字符串和其他需要从 appsettings.json 读取的属性创建选项类型。

对于 IServiceCollection 服务,从 appsettings.json:

读取属性
services.Configure<YourServiceOptions>(_config["ConnectionStrings:NameOfContext"])

而且,最后一步是初始化您的数据库连接:

services.AddDbContext<NameOfContext>(builder => builder.UseMySql(options.ConnectionString));

这仅适用于 MySql。

如果 DBHandler 是您的基础 class 并且 DbActivityRepository 是 DBHandler 的子class,则没有必要在 DBActivityRepository 中创建 DBHandler 实例,您可以使用它们 public并直接保护 methods/properties(继承),像这样:

public interface IConfiguration
{
    string GetConnectionString();
}

public abstract class DbHandler
{
    protected DbHandler(IConfiguration configuration)
    {
        ConnectionString = configuration.GetConnectionString();
    }

    protected string ConnectionString { get; }
}

public class DbActivityRepository : DbHandler
{
    public DbActivityRepository(IConfiguration configuration) 
        : base(configuration)
    {
    }

    private void DoSomething()
    {
        // use your connStr
        Console.Write(ConnectionString);
    }
}