2014-07-24 4 views
0

나는 여러 클래스에 걸쳐 구현되는 "IRunAtStartup"인터페이스를 가지고 있습니다. 인터페이스에는 응용 프로그램 시작시 모든 클래스에 대해 실행해야하는 "Execute"메소드가 있습니다.Unity Container의 동일한 인터페이스에 대한 여러 클래스

컴파일 할 때 나는 인터페이스를 구현하는 클래스의 수를 모르고 있기 때문에 일반적인 방식으로 작성해야합니다. -에서 "유형을 확인할 수 없습니다"

container.RegisterTypes(runAtStartUp, WithMappings.FromAllInterfaces); 

2) 컴파일 오류가 발생합니다 :

IOC의에 대한 유니티를 사용하고 다음은 내가 2를 시도 2 ​​개 접근법)

한 접근 방법이다 런타임 오류가 발생합니다 for 루프 내부에 명령을 등록하십시오. 나는 Unity 세계에 상대적으로 새롭고 내가 여기에 몇 가지 기본적인 문제를 놓치고 있다고 의심한다.

IEnumerable<Type> runAtStartUp = typeFinder.FindClassesOfType<IRunAtStartup>(true); 

foreach (var type in runAtStartUp) 
{ 
    container.RegisterType<IRunAtStartup, type>(type.AssemblyQualifiedName); 
} 
foreach (var task in container.ResolveAll<IRunAtStartup>()) 
      { 
       task.Execute(); 
      } 
+0

스택 추적을 게시 할 수 있습니까? 접근법 2는 괜찮은 것 같습니다. 등록 된 유형 중 하나에 문제가있을 수 있습니다. – cynic

+0

접근법 2는 컴파일되지 않습니다. 여기 같은 스크린 샷이 있습니다 : https://dl.dropboxusercontent.com/u/11374665/approach-2.JPG – Vikram

+0

오. 잘못된 C# 구문을 사용하고 있습니다. 'container.RegisterType (typeof (IRunAtStartup), type, Type.AssemblyQualifiedName)'을 대신 사용하십시오. – cynic

답변

1

접근이의 아이디어는 그러나 당신은 C#을 구문 오류가 올바른 (사용라는 이름의 등록)입니다. 사용할 방법은 다음과 같습니다.

container.RegisterType(typeof(IRunAtStartup), type, type.AssemblyQualifiedName); 
+0

지금 약간 다른 시나리오가 있지만 구문상의 실수를 다시 한 것 같아요. 바로 알아볼 수 있습니까? ** foreach (typeFinder.FindClassesOfType의 var settingClass (true)) { container.Resolve (). LoadSetting ("domId"); } ** – Vikram

+0

여기에 스크린 샷이있는 링크가 있습니다. [link] (https://dl.dropboxusercontent.com/u/11374665/LoadSetting.JPG) 도움을 감사합니다. @cynic – Vikram

+0

오른쪽에 메서드의 비 제네릭 버전을 만들 수 있습니다. 즉,'LoadSettings 유형 설정 유형, 문자열 domainGuid ...)'. 또는 리플렉션을 사용하여 기존 일반 버전을 호출 할 수 있습니다. C#에서는 제네릭 메서드를 호출 할 수 없습니다. < > 사이에는 런타임에 알려진 'System.Type' 인스턴스가 아니라 컴파일 타임에 알려진 형식 이름이 사용됩니다. – cynic

관련 문제