У меня проблема с 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;
}
Я создал Resolver для сопоставления специального поля моего объекта:
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 в объекте Entity:
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.ObjectDisposedException' произошло в
Autofac.dll, но не был обработан в коде пользователя
Дополнительная информация: Эта операция разрешения уже завершена. когда
регистрация компонентов с использованием лямбда-выражения, IComponentContext 'c'
Параметр лямбда не может быть сохранен. Вместо этого либо разрешите
IComponentContext снова из 'c' или разрешите фабрику на основе Func <> в
создать последующие компоненты из.
Кто-нибудь может мне помочь?