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);
Automapper MapperRegistry.AllMappers() 정적 메서드를 사용하면 수동이 아닌 모든 매퍼를 가져올 수 있습니다. 하지만 첫 번째 문장을 응축하는 경우를 제외하고 SM에서 사용하는 유사한 설치 예 –
글쎄 내 문제의 일부입니다. Configuration Constructor는 IEnumerable를 취하지 만 MapperRegistry.AllMappers() 정적 메서드는 Func > –
을 반환하고, TypeMapObjectMapperRegistry.AllMappers()()를 실행합니다. 열쇠는 두 번째 괄호 집합입니다. 그것은'AllMappers'에서 반환 된 델리게이트가 호출되어'IEnumerable'를 반환합니다 : –