1

지미 보가트에는 Automapper with an IoC container 사용에 대한 기사가 있습니다. 그는 StructureMap을 사용하는 예제를 가지고 있지만 Unity를 사용하고 InjectionConstructor를 올바르게 사용하는 방법을 모르겠습니다.Unity에서 어떻게합니까?

다음은 본 문서의 코드이며 아래는 저의 가난한 시도입니다. 아무도 나에게 제대로 할 수있는 방법을 말해 줄 수 있습니까?

public class ConfigurationRegistry : Registry 
{ 
    public ConfigurationRegistry() 
    { 
     ForRequestedType<Configuration>() 
      .CacheBy(InstanceScope.Singleton) 
      .TheDefault.Is.OfConcreteType<Configuration>() 
      .CtorDependency<IEnumerable<IObjectMapper>>().Is(expr => expr.ConstructedBy(MapperRegistry.AllMappers)); 

     ForRequestedType<IConfigurationProvider>() 
      .TheDefault.Is.ConstructedBy(ctx => ctx.GetInstance<Configuration>()); 

     ForRequestedType<IConfiguration>() 
      .TheDefault.Is.ConstructedBy(ctx => ctx.GetInstance<Configuration>()); 
    } 
} 

내 시도 :

container.RegisterType<IConfiguration, Configuration>(new SingletonLifetime()) 
        .Configure<InjectedMembers>() 
         .ConfigureInjectionFor<Configuration>(
          new InjectionConstructor(typeof(IEnumerable<IObjectMapper>)), MapperRegistry.AllMappers); 

답변

1

이것은 내가하고 결국 무엇을 :

 IEnumerable<IObjectMapper> allMappers = new List<IObjectMapper>() { 
      new TypeMapMapper(TypeMapObjectMapperRegistry.AllMappers()), 
      new StringMapper(), 
      new FlagsEnumMapper(), 
      new EnumMapper(), 
      new ArrayMapper(), 
      new DictionaryMapper(), 
      new EnumerableMapper(), 
      new AssignableMapper(), 
      //new TypeConverterMapper(), 
      new NullableMapper(), 
     }; 

     container.RegisterType<Configuration>(new SingletonLifetime()) 
         .Configure<InjectedMembers>() 
          .ConfigureInjectionFor<Configuration>(
           new InjectionConstructor(allMappers)); 

    container.RegisterType<IConfigurationProvider, Configuration>(); 
    container.RegisterType<IConfiguration, Configuration>(); 
    container.RegisterType<IMappingEngine, MappingEngine>(); 

이 작동하지만 다른 사람이 더 나은 구현이 있다면 나는 모든 귀를 요하고 이것은 여전히 ​​그것에 현상금이 있습니다.

+0

Automapper MapperRegistry.AllMappers() 정적 메서드를 사용하면 수동이 아닌 모든 매퍼를 가져올 수 있습니다. 하지만 첫 번째 문장을 응축하는 경우를 제외하고 SM에서 사용하는 유사한 설치 예 –

+0

글쎄 내 문제의 일부입니다. Configuration Constructor는 IEnumerable 를 취하지 만 MapperRegistry.AllMappers() 정적 메서드는 Func > –

+0

을 반환하고, TypeMapObjectMapperRegistry.AllMappers()()를 실행합니다. 열쇠는 두 번째 괄호 집합입니다. 그것은'AllMappers'에서 반환 된 델리게이트가 호출되어'IEnumerable '를 반환합니다 : –