我以前使用过 Autofac,但现在我想尝试一下 SimpleInjector。我的问题是,在我的方法中调用 mappingEngine 时,出现以下错误:
Missing type map configuration or unsupported mapping.
Mapping types: Something -> SomethingDto Destination path: IEnumerable`1[0]
Source value:
_mappingEngine.Map<IEnumerable<SomethingDto>>(IEnumerableOfSomething);
^-- doesn't work
Mapper.Map<IEnumerable<SomethingDto>>(IEnumerableOfSomething);
^-- works (That's not what I want)
Mapper.Map 不是我想要的。我在此基础上注册 Automapper:
Replace Ninject with Simple Injector
container.Register<ITypeMapFactory, TypeMapFactory>();
container.RegisterAll<IObjectMapper>(
MapperRegistry.AllMappers());
container.RegisterSingle<ConfigurationStore>();
container.Register<IConfiguration>(() =>
container.GetInstance<ConfigurationStore>());
container.Register<IConfigurationProvider>(() =>
container.GetInstance<ConfigurationStore>());
container.Register<IMappingEngine, MappingEngine>();
<小时/>
Mapper.Initialize(x =>
{
var profiles = container.GetAllInstances<Profile>();
foreach (var profile in profiles)
{
x.AddProfile(profile);
}
});
Mapper.AssertConfigurationIsValid();
我的问题是,如何在 SimpleInjector 中注册 IMappingEngine 并正确添加我的配置文件?
提前致谢!
问候mtrax
最佳答案
解决了!:-)
在启动 MvcControllerFactory 后,我注册配置文件的时间太晚了。我希望我的伪例子可以帮助您防止这样的错误。
// SimpleInjector
var container = new Container();
// AutoMapper registration
container.Register<ITypeMapFactory, TypeMapFactory>();
container.RegisterCollection(MapperRegistry.Mappers);
container.RegisterSingleton<ConfigurationStore>();
container.Register<IConfiguration>(container.GetInstance<ConfigurationStore>);
container.Register<IConfigurationProvider>(container.GetInstance<ConfigurationStore>);
container.RegisterSingleton(() => Mapper.Engine);
// AutoMapper Profiles registration
container.RegisterCollection<Profile>(new MappingAProfile(),
new MappingBProfile(),
new MappingCProfile());
// Adding AutoMapper profiles
Mapper.Initialize(x =>
{
var profiles = container.GetAllInstances<Profile>();
foreach (var profile in profiles)
{
x.AddProfile(profile);
}
});
Mapper.AssertConfigurationIsValid();
container.Verify();
container.RegisterAsMvcControllerFactory();
*RegisterAsMvcControllerFactory() 可在以下位置查找:Simple Injector MVC Integration Guide .
关于mapping - 简单Injector注册IMappingEngine(AutoMapper),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12538007/