2009-09-11 4 views
4

.net 클래스가 있습니다. 우리의 의존성을 해결하기 위해 IOC로 단일성을 사용하고 있습니다. 처음부터 모든 종속성을로드하려고 시도합니다. 런타임시 종속성을로드 할 수있는 Unity의 방법 (설정)이 있습니까?종속성 주입의 지연 해상도

답변

0

Unity는 게으르게 인스턴스를 생성해야한다고 생각합니다. 다른 종속성을 포함하는 어셈블리를로드하고 있다는 것을 의미합니까? 그렇다면 MEF을 살펴볼 수 있습니다. 모듈 식 응용 프로그램을 위해 특별히 설계되었습니다.

+1

또는 프리즘 (Composite Application Guidance) : http://compositewpf.codeplex.com –

1

클래스에 게으른 종속성을 전달할 수 있도록 일부 코드 here을 블로깅했습니다.

class MyClass(IDependency dependency) 

class MyClass(ILazy<IDependency> lazyDependency) 

이 당신에게 당신이 그것을 사용해야 할 때까지 종속성의 실제 작성을 지연하는 옵션을 제공합니다 : 그것은 당신이 대체 할 수 있습니다. 필요할 때 lazyDependency.Resolve()으로 전화하십시오. 게으른 <에 대한 네이티브 지원 -

container.RegisterType(typeof(ILazy<>),typeof(Lazy<>)); 
10

더 나은 솔루션있다 : 당신이 당신의 용기에 등록해야합니다

public interface ILazy<T> 
{ 
    T Resolve(); 
    T Resolve(string namedInstance); 
} 

public class Lazy<T> : ILazy<T> 
{ 
    IUnityContainer container; 

    public Lazy(IUnityContainer container) 
    { 
     this.container = container; 
    } 

    public T Resolve() 
    { 
     return container.Resolve<T>(); 
    } 

    public T Resolve(string namedInstance) 
    { 
     return container.Resolve<T>(namedInstance); 
    } 
} 

이 그것을 사용할 수 있도록 : 여기

는 ILazy의 구현입니다 T > 및 IEnumerable < 게으른 > Unity 2.0에서. 그것을 확인하십시오 here.

+0

'unityContainer.AddNewExtension ();'과'PM> Install-Package Unity.Extensions라는 줄을 잊지 마라. . 게으른' –