我对 Autofac 和 Automapper 有疑问。
在我的 WebApi 中,我有以下代码来注册我的类:
public static void Initialize(HttpConfiguration config, IContainer container)
{
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
_container = container;
}
private static IContainer RegisterServices(ContainerBuilder builder)
{
//Register your Web API controllers.
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterModule<MapperInstaller>();
builder.RegisterType<VurpEntities>();
builder.RegisterType<EntityFrameworkUnitOfWork>().As<IUnitOfWork>();
builder.RegisterType<AppService>().As<IAppService>();
builder.RegisterType<AppRepository>().As<IAppRepository>();
builder.RegisterType<BusinessService>().As<IBusinessService>();
builder.RegisterType<BusinessRepository>().As<IBusinessRepository>();
//...
//all my types are registered here
//...
//Set the dependency resolver to be Autofac.
_container = builder.Build();
return _container;
}
我创建了一个解析器来映射对象的特殊字段:
public class ProductTypeResolver : IMemberValueResolver<ProductDto, Product, string, Enumeration.ProductType>
{
public ProductType Resolve(ProductDto source, Product destination, string sourceMember, ProductType destMember, ResolutionContext context)
{
Enum.TryParse(sourceMember, out destMember);
return destMember;
}
}
我有一个在实体对象中映射 DTO 对象的配置文件:
CreateMap<ProductDto, Product>()
.ForMember(dest => dest.Category, opt => opt.Ignore())
.ForMember(dest => dest.Feature, opt => opt.Ignore())
opts.ResolveUsing<ProductTypeResolver, string>(src => src.type));
当我尝试映射对象时Product p = _mapper.Map<Product>(productDto);
我收到错误:
发生“System.ObjectDisposeException”类型的异常
Autofac.dll 但未在用户代码中处理
附加信息:此解析操作已结束。什么时候
使用 lambda 注册组件,IComponentContext 'c'
无法存储 lambda 的参数。相反,要么解决
再次从 'c' 调用 IComponentContext,或者将基于 Func 的工厂解析为
从中创建后续组件。
有人可以帮助我吗?