Jimmy Bogart有一篇关于使用Automapper with an IoC container的文章。他有一个使用StructureMap的例子,但我使用的是Unity,我不确定如何正确使用InjectionConstructor。
以下是文章及以下的代码,这是我的不良尝试。谁能告诉我如何正确地做到这一点?
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);
答案 0 :(得分: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>();
这样可行,但如果其他人有更好的实施方式,我会全力以赴,这仍然有很大的优惠。