2017-02-18 1 views
2

DataAccessLayer.cs에 의존성을 주입하는가장 좋은 방법은 <code>DataAccess</code> 프로젝트에서 실행

class Program 
{ 
    public static IFoo Foo { get; set; } // Her I want to inject dependency directly at runtime 

    static void Main(string[] args) 
    { 
    } 
} 

을 내가 INJ 할 Foo 속성의 종속성을 런타임에 직접 처리하십시오.

가능한 경우 클래스와 인터페이스를 매핑 할 때 속성 대신 구성 파일을 사용하고 싶습니다.

가장 좋은 방법은 무엇입니까? 가능한 경우 Unity와 함께이 작업을 수행하는 방법은 무엇입니까?

+0

Main 함수에서 DataAccessLayer의 인스턴스를 사용 하시겠습니까? –

+0

@VasilutLucian 예 –

+2

종속성 주입은 종속성을 주입 할 수있는 느슨하게 결합 된 응용 프로그램을 작성하는 것입니다 (일반적으로 클래스 생성자를 통해). 이 프로세스의 일부는 정적 변수 (또는 속성)를 제거하고 DI 컨테이너의 * 수명 관리 *로 바꾸는 것을 포함하여 디자인을 제한하는 것입니다. 따라서 디자인을 밖으로 던지거나 Dependency Injection을 적용 할 수는 없습니다. DI 친화적 인 디자인을 적용해야합니다. DI 친화적 인 설계 이해를 위해 [Dependency Injection in .NET] (https://www.manning.com/books/dependency-injection-in-dot-net)을 읽어보십시오. – NightOwl888

답변

0

NuGet 패키지에서 Unity를 설치할 수 있습니다. 당신이 여기에서 찾을 수 있습니다 유니티에 대한

static void Main(string[] args) 
    { 
     var unityContainer = new UnityContainer(); 
     unityContainer.RegisterType<IDataAccessLayer, DataAccessLayer>(); 
     var instancerOfDataAccessLayer = unityContainer.Resolve<IDataAccessLayer>(); 
     instancerOfDataAccessLayer.Foo(); 
     Console.ReadLine(); 
    } 

상세 정보 : http://geekswithblogs.net/danielggarcia/archive/2014/01/23/introduction-to-dependency-injection-with-unity.aspx

는 희망이 도움이 그렇다면, 당신은 단순히 같은 것을 할 수 있습니다.

+0

그것은 작동합니다. 하지만 내 주요 프로젝트에는'DataAccess project'와'DataAccess.Contracts project'에 대한 참조가 있어야합니다. 이 경우 직접'var instance = new DataAccessLayer()'하는 대신에 이것을하는 것이 무엇입니까? –

+0

귀하의 경우에는 'DataAccessLayer'의 인스턴스를 직접 생성하는 것이 좋습니다. 그러나 더 복잡한 응용 프로그램에서는 Dependency Injection 원칙이 매우 많이 사용됩니다 (인터넷에서 읽을 수 있습니다). 또한 DI 애플리케이션을 테스트하고 싶다면 모의 저장소 (Mock Repository)와 다른 것들을 만들 수 있습니다. 당신은 예제를 위해 Unity를 사용하여 예제를 요청했습니다. 이것은 DI의 힘의 작은 부분입니다. –

+0

매우 포괄적 인 답변을 주셔서 감사합니다. 내 메인 프로젝트의 모든 속성에 의존성을 주입하는 것이 가능합니까? 예를 들어 내 주요 프로젝트에서'IDataAccessLayer' 속성을 포함하는 로그 클래스가 있습니다 –

관련 문제