【发布时间】:2016-02-22 22:50:57
【问题描述】:
我已经尝试了各种排列,但我当前的配置(因为它与 AutoMapper 相关)是这样的:
builder.RegisterAssemblyTypes().AssignableTo(typeof(Profile)).As<Profile>();
builder.Register(c => new MapperConfiguration(cfg =>
{
foreach (var profile in c.Resolve<IEnumerable<Profile>>())
{
cfg.AddProfile(profile);
}
})).AsSelf().SingleInstance();
builder.Register(c => c.Resolve<MapperConfiguration>().CreateMapper(c.Resolve)).As<IMapper>().InstancePerLifetimeScope();
builder.RegisterType<MappingEngine>().As<IMappingEngine>();
我有一个使用 IMapper mapper 的构造函数,但是我继续得到 YSOD:
None of the constructors found with'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'
on type '' can be invoked with the available services and parameters:
Cannot resolve parameter 'AutoMapper.IMapper mapper' of constructor
'Void .ctor(...,...,..., AutoMapper.IMapper)'.
这个类在没有自动映射器引用的情况下完美运行,所以我确定问题出在我的自动映射器配置上。
我不确定我在这里缺少什么,因为我对 AutoFac 和 AutoMapper 都很陌生。
编辑:
我也试过了:
builder.Register(c => new MapperConfiguration(cfg =>
{
cfg.CreateMap<IdentityUser, AspNetUser>().ReverseMap();
})).AsSelf().SingleInstance();
builder.Register(ctx => ctx.Resolve<MapperConfiguration>().CreateMapper()).As<IMapper>();
//I've tried both of these lines separately, neither work
builder.Register(c => c.Resolve<MapperConfiguration>().CreateMapper(c.Resolve)).As<IMapper>().InstancePerLifetimeScope();
我也尝试根据 cmets 中的建议手动添加配置文件
【问题讨论】:
-
如果您临时手动添加个人资料而不是使用
IEnumerable<Profile>,会发生什么情况? -
@devuxer 查看我的更新。这也不起作用:(
-
我认为您的汇编扫描代码可能不太正确,但我在测试应用程序中尝试了您的其余代码,它工作正常。因此,一定是其他原因导致了问题。您是否在注册
IMapper的行放置了断点以确保它确实被命中? -
是的,断点命中没有问题。就像我说的,我剩下的 autofac 东西都在工作。
-
我创建了一个答案,以便向您展示我的测试代码。底线:您的 AutoFac 代码似乎没问题。还有其他问题。
标签: c# automapper autofac automapper-4