2009-11-03 4 views
1

나는 나중에 내가 사용자 동작에 대한 응답으로 동적 온 디맨드를로드하여 설정되는 모듈을로드하고있어 프리즘의 다른 모듈에 등록 된 유형을 해결하는 방법은 무엇입니까?

protected override IModuleCatalog GetModuleCatalog() 
{ 
    var catalog = new ModuleCatalog(); 
    catalog 
     .AddModule(typeof(LoginModule)) 
     .AddModule(typeof(AppModule)) 
     .AddModule(typeof(DataTransformationModule), InitializationMode.OnDemand) 
     .AddModule(typeof(SyncModule), InitializationMode.OnDemand); 

    return catalog; 
} 

UnityBootstrapper

를 사용하여 내 프리즘 응용 프로그램에서 몇 가지 모듈을 등록하고 있습니다. 다른 모듈에서 OnDemand 모듈을로드 할 수 있었지만 OnDemand 로딩 모듈에 등록 된 유형이 해결되지 않았습니다. 각 모듈이기 때문에 I가 SyncModule에 등록 유형을로드 할 때

public class SyncModule : IModule 
{ 
    private readonly IUnityContainer container; 

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

    public void Initialize() 
    { 
     this.RegisterViewsAndServices(); 

     ISyncController controller = this.container.Resolve<ISyncController>(); 
     controller.Run(); 
    } 

    protected void RegisterViewsAndServices() 
    { 
     this.container.RegisterType<ISyncController, SyncController>(); 
     this.container.RegisterType<ISyncAnchorsRepository, SyncAnchorsRepository>(); 
     this.container.RegisterType<ISyncService, SyncService>(); 
     this.container.RegisterType<IView, SynchronizeView>("SynchronizeView"); 
     this.container.RegisterType<IView, SyncTrayView>("SyncTrayView"); 
    } 
} 

다른 모듈에서 컴파일러 (위)는 ResolutionFailedException을 던진다. 어쨌든 IUnityContainer의 동일한 인스턴스를 모든 모듈에 삽입 할 수 있습니까? (프리즘의 남용이 될 것입니까?)

답변

0

내 실수. 어셈블리의 정규화 된 이름없이 Type.GetType을 사용하여 다른 모듈의 형식을 동적으로로드했습니다. Unity 컨테이너에 모듈로 등록 된 유형은 다른 곳에서 해결할 수 있습니다.

+1

당신은 1) 항상 우리에게 당신의 실제 코드를 보여 주어야합니다 2) 이것에 대해 Type.GetType을 사용하지 마십시오. 모듈간에 사용해야하는 유형이있는 경우 해당 모듈이 중앙 라이브러리를 공유하게하십시오. 나는 이것을 보통 "계약"이라고 부른다. ISyncService와 같은 항목을 공유하는 경우 unityContainer.Resolve (Type.GetType ("SyncModule.ISyncService, SyncModule"));)가 아닌 unityContainer.Resolve ()를 수행하면됩니다. –

+0

안녕하세요 앤더슨,이 질문을 살펴 주시겠습니까 : http://stackoverflow.com/questions/1678423/what-is-the-best-method-to-load-views-dynamically-from-a-navigation- control-in-pr 나는 코드 샘플로 GetType()을 사용하고있는 시나리오를 정교하게 다듬었다. – Raj

1

ResolutionFailedException의 전체 메시지를보십시오. 다소 진부하지만, 일반적으로 실패한 것에 대한 자세한 정보가 포함되어 있습니다. 보통이 예외는 해결 된 유형이 아닌 생성자 매개 변수를 통해 주입 된 종속성 중 하나에서 발생한 문제에 대해 발생합니다.

+0

컨테이너에 등록 된 모듈에서 아무런 문제없이 이러한 유형을 해결할 수 있습니다. 다른 모듈에서이 예외가 발생합니다. – Raj

+0

그는 REAL 오류를 확인하기 위해 내부 예외를 살펴야한다고 말하고 있습니다. 또는 ExceptionExtensions.GetRootException (예외)을 사용하여 포함 된 해결 오류 대신 루트 예외를 가져올 수 있습니다. –

관련 문제