2017-04-30 4 views
2

나는 너희들에게 도움이 필요하다. 현재 콘솔 애플리케이션의 Dependency Injection 작업을하고 있습니다. 단일 클래스에서는 의존성 주입을 이해하기 위해 3 개의 계층을 정의했습니다. 실제로 Oracle 또는 Sql 요구 사항을 기반으로 할 수있는 데이터 acess 레이어의 객체를 주입하려고합니다.하지만 어떤 계층에 등록을 기반으로 주입이 일어나고 있습니다. 어떤 사람들이 내가 어떻게 적절한 주사를 할 수 있는지 말해 줄 수 있습니까?종속성 주입이 마지막 객체를 등록하는 이유는 무엇입니까?

UI 층 :

class Program 
{ 
    static void Main(string[] args) 
    { 
     IUnityContainer objconatiner = new UnityContainer(); 
     objconatiner.RegisterType<Customer>(); 
     objconatiner.RegisterType<IDal, SqlserverDal>(); 
     objconatiner.RegisterType<IDal, OracleServerDal>(); 

     Customer ocust = objconatiner.Resolve<Customer>(); 
     ocust.CustName = "Taylor Swift"; 
     ocust.Add(); 
    } 
} 

MIDDLE 층 :

public class Customer 
{ 
    private IDal oidal; 
    public string CustName { get; set; } 

    public Customer(IDal idal) 
    { 
     oidal = idal; 
    } 

    public void Add() 
    { 
     oidal.Add(); 
    } 
} 

DAL 층 : 이름 등록 재생에 오는 곳

public interface IDal 
{ 
    void Add(); 
} 

public class SqlserverDal : IDal 
{ 
    public void Add() 
    { 
     Console.Write("Now using Sql server"); 
    } 
} 

public class OracleServerDal : IDal 
{ 
    public void Add() 
    { 
     Console.Write("Now using Orcale server"); 
    } 
} 
+0

해결하려는 항목을 컨테이너가 알기를 어떻게 기대합니까? 일부 구성을 검사해서 해당 구현 중 하나만 등록하면 안됩니까? –

+0

하지만 새로운 Dal 레이어를 호출하기를 원한다면 어떻게해야할까요? 구성에 기반하여 종속성을 주입하는 방법을 묻는 것입니다. 모든 오브젝트를 통합 컨테이너에 등록해야 모든 dal 레이어를 등록해야합니다. . 근데 내가 어떻게 구성 부분을 통과 했니? – aksh1989

+0

@ aksh1989 같은 앱을 실행하는 동안 SQL과 Oracle이 모두 필요한지 여부는 알 수 없습니다. 조건을 기반으로 주입하거나 애플리케이션 수명을 사용하십시오. – niksofteng

답변

0

이 정확한 상황입니다.

static void Main(string[] args) 
{ 
    IUnityContainer objconatiner = new UnityContainer(); 
    objconatiner.RegisterType<Customer>(); 
    objconatiner.RegisterType<IDal, SqlserverDal>("SqlServer"); 
    objconatiner.RegisterType<IDal, OracleServerDal>("Oracle"); 

    Customer ocust = objconatiner.Resolve<Customer>(); 
    ocust.CustName = "Taylor Swift"; 
    ocust.Add(); 
} 

public class Customer 
{ 
    private IDal oidal; 
    public string CustName { get; set; } 

    public Customer([Dependency("SqlServer")]IDal idal) 
    { 
     oidal = idal; 
    } 

    public void Add() 
    { 
     oidal.Add(); 
    } 
} 

는 이제 모두 등록은 사용할 수 있지만 당신은 당신이 당신은 내가 위 또는 문자열에 걸리는 Resolve 호출을 통해 보여 주었다으로이 속성을 통해 수행 할 수 있습니다, 해결 할 이름을 통해 원하는 등록 지정해야 .

+0

고맙습니다. – aksh1989

관련 문제