2017-04-03 1 views
0

Unity에서 일반적인 인터페이스를 등록하는 것과 관련하여 여러 스레드를 살펴 보았습니다. 불행히도 그 중 일부는 실제로 작동하지 않습니다. 이것은 정의 된 인터페이스입니다.Unity와 일반 핸들러 인터페이스 등록

public interface IHandler<in TCommand>{} 

예 클래스 : 다음 공장에서이를 해결하기 위해 노력하고있어

public class MyTestHandler : IHandler<TestCommand> 
{} 

는 다음과 같이

public IHandler<TCommand> Create<TCommand>() 
    { 
     return _container.Resolve<IHandler<TCommand>>(); 
    } 

내 처리기를 등록하려고 시도했습니다

container.RegisterTypes(AllClasses.FromLoadedAssemblies().Where(type => typeof(IHandler<>).IsAssignableFrom(type)), WithMappings.FromAllInterfaces, WithName.TypeName, WithLifetime.Transient); 

불행히도 내가 명시 적으로 구체적인 처리기를 등록하십시오. 작동시키지 못하는 것 같습니다. 어떤 제안이라도 좋을 것입니다.

미리 감사드립니다.

답변

0

문제는 Where입니다. IHandler<>MyTestHandler에서 할당 할 수 없으므로 등록이 없습니다. 조건이 이름이 "처리기"를 포함하는 모든 종류의를 찾을 곳이 듯 내가 업데이트 테스트에 대한

internal class Program 
{ 
    static void Main(string[] args) 
    { 
     var container = new UnityContainer(); 

     container.RegisterTypes(AllClasses.FromLoadedAssemblies().Where(type => type.Name.Contains("Handler")), WithMappings.FromAllInterfaces, WithName.Default, WithLifetime.Transient); 
     var instance = container.Resolve<IHandler<TestCommand>>(); 
     var instance2 = container.Resolve<IHandler<TestCommand2>>(); 
    } 
} 

public interface IHandler<TCommand> 
{ 
} 

public class MyTestHandler : IHandler<TestCommand> 
{ 
} 

public class TestCommand 
{ 
} 
public class MyTestHandler2 : IHandler<TestCommand2> 
{ 
} 

public class TestCommand2 
{ 
} 
+0

:

이 나를 위해 잘 작동, 즉, instanceMyTestHandlerinstance2MyTestHandler2 수신 수신 그들을 등록했지만 여전히 그들을 해결하지 못했습니다. –