2017-10-10 3 views
0

닷넷 코어의 구성을 주입 ... 내가 기본 클래스에서 내 클래스 DBActivityRepository에 연결 문자열을 주입하고 싶습니다의존성 삽입 (Dependency Injection) : I 닷넷 코어 2.0에 오래된 소프트웨어를 마이그레이션하고있어 2.0

. ..

난 그냥 기본 클래스

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에서 읽을 필요한 연결 문자열 및 기타 속성에 대한 입력 만들 수 있습니다.

services.Configure<YourServiceOptions>(_config["ConnectionStrings:NameOfContext"]) 

을 그리고, 마지막 단계는 DB 연결을 초기화하기입니다 : IServiceCollection 서비스

는 appsettings.json에서 속성을 읽을 수 MySQL과

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

이 유일한 작품.

+0

@Florian Koch ...하지만 내 경우에는 DI가 클래스 라이브러리 (DAL)에 있으며 클래스는 MVC 프로젝트에서 공유됩니다. 모든 구현에서 중앙 집중화를 위해 DAL에 연결 문자열을 주입해야합니다. – Cicciux

+0

@Cicciux 미안하지만 이건 내 대답이 아니야, 방금 형식을 개선했다. –