protected override void Load(ContainerBuilder builder) { builder.RegisterType <EFUnitOfWork>().As <IUnitOfWork>().WithParameter("connectionString", "FarmContext").InstancePerRequest(); builder.RegisterType <FarmService>().As <IFarmService>().WithParameter("map", AutoMapperConfig.GetMapper()).InstancePerRequest(); base.Load(builder); }
protected override void Load(ContainerBuilder builder) { /* * CR-1 - move registration of data access services to DataAccessModule, that is located in FarmApp.DAL assembly */ builder.RegisterType <EFUnitOfWork>().As <IUnitOfWork>().WithParameter("connectionString", "FarmContext").InstancePerRequest(); /* * CR-1 * IMapper instance must be registered in container directly. * See comments tot AutofacConfig and AutomapperConfig classes * Target code here: * builder.RegisterType<FarmService>().As<IFarmService>().InstancePerRequest(); */ builder.RegisterType <FarmService>().As <IFarmService>().WithParameter("map", AutoMapperConfig.GetMapper()).InstancePerRequest(); base.Load(builder); }
protected override void Load(ContainerBuilder builder) { //здесь бы я зарегистрировал в первую очередь FarmContext, обязательно InstancePerRequest, чтобы контейнер управлял временм жизни. //зарегистрировал все конкретные репозитории как реализации интерфейса: builder.RegisterType<GenericRepository<Farm>>().As<IRepository<Farm>>().InstancePerDependency() - нет смысла использовать InstancePerRequest, т.к. создание репозитория простая операция, а контекст у нескольких репозиториев будет один //IMapper можно зарегистрировать как builder.RegisterInstance(AutoMapperConfig.GetMapper()).As<IMapper>(), чтобы он загрузил конфигурацию один раз. Дополнение. Регистрировать в проекте FarmApp.Web //FarmService тоже сделал бы InstancePerDependency, чтобы он уничтожался сразу как пропадает ссылка на него. В совокупности с предыдущим пунктом, убрал бы WithParameter("map", AutoMapperConfig.GetMapper()) builder.RegisterType <EFUnitOfWork>().As <IUnitOfWork>().WithParameter("connectionString", "FarmContext").InstancePerRequest(); builder.RegisterType <FarmService>().As <IFarmService>().WithParameter("map", AutoMapperConfig.GetMapper()).InstancePerRequest(); base.Load(builder); }