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

时间:2017-10-10 09:21:34

标签: c# dependency-injection configuration asp.net-core-2.0

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

我想在我的类DBActivityRepository中从基类注入一个连接字符串......

我是否应该在创建基类时传递配置

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();
}

由于

2 个答案:

答案 0 :(得分:0)

对于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。

答案 1 :(得分:0)

如果DBHandler是您的基类而DbActivityRepository是DBHandler的子类,则不必在DBActivityRepository中创建DBHandler实例,您可以直接使用它们的public和protected方法/属性(继承),如下所示:< / p>

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);
    }
}
相关问题