У Джимми Богарта есть статья об использовании 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, за исключением конденсации первого оператора – 2009-08-01 16:41:17
Ну, это часть моей проблемы. Конструктор для конфигурации принимает IEnumerable, но статический метод MapperRegistry.AllMappers() возвращает Func > –
, тогда вы будете делать 'TypeMapObjectMapperRegistry.AllMappers()()'. Ключ - это второй набор скобок. Это заставляет делегата, возвращаемого из 'AllMappers', вызываться и возвращать' IEnumerable ':) –