2017-10-10 147 views
0

我移植一些旧的软件到.NET的核心2.0 ...依赖注入:在对.NET核心注入配置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(); 
} 

谢谢

+0

https://www.codeproject.com/Articles/1204089/ASP-NET-Core-Dependency-Injection – Ramankingdom

+0

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/依赖注入 – Ramankingdom

回答

0

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

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); 
    } 
} 
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"]) 

而且,最后一步是init你的数据库连接:

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

与MySQL这只作品。

+0

@Florian Koch ...但在我的情况下,DI在类库(DAL)中,该类在MVC项目中共享。我需要在DAL中注入连接字符串以集中在所有实现中。 – Cicciux

+0

@Cicciux抱歉,但这不是我的答案,我只是改进了格式 –