DI с шаблонами unitofwork и репозитория в windowsform используйте autofac
У меня есть проблема, когда я строю инъекцию зависимостей приложения Project WindowsForm. Вот это мой код в файле Program.cs.
var builder = new ContainerBuilder(); builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()); // Register your Web API controllers. //builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerDependency(); builder.RegisterType<DbFactory>().As<IDbFactory>().InstancePerDependency(); builder.RegisterType<DITestDbContext>().AsSelf().InstancePerDependency(); //builder.Register(c => app.GetDataProtectionProvider()).InstancePerRequest(); // Repositories builder.RegisterAssemblyTypes(typeof(ProductCategoryRepository).Assembly) .Where(t => t.Name.EndsWith("Repository")) .AsImplementedInterfaces().InstancePerDependency(); // Services builder.RegisterAssemblyTypes(typeof(ProductCategoryService).Assembly) .Where(t => t.Name.EndsWith("Service")) .AsImplementedInterfaces().InstancePerDependency(); Autofac.IContainer container = builder.Build(); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(container.Resolve<Form1>());
И здесь это мой код в форму form1.в CS
private IProductCategoryService productCategoryService; private IUnitOfWork unitOfWork; public Form1(IProductCategoryService productCategoryService, IUnitOfWork unitOfWork) { this.productCategoryService = productCategoryService; this.unitOfWork = unitOfWork; InitializeComponent(); } protected override void OnLoad(EventArgs e) { base.OnLoad(e); LoadProductCategory(); } private void LoadProductCategory() { var data = productCategoryService.GetAll(); gridControl1.DataSource = data; }
И я получаю ошибку
Цитата:- Произошла ошибка при активации определенной регистрации. Подробнее см. Внутреннее исключение. Регистрация: Активатор = Form1 (ReflectionActivator), Услуги = [Презентация.Form1], Lifetime = Autofac.Core.Lifetime.CurrentScopeLifetime, Sharing = None, Ownership = OwnedByLifetimeScope'
Цитата:NoConstructorsFoundException: не найдено доступных конструкторов для типа 'DITest.Data.Инфраструктура.UnitOfWork'.
Что я уже пробовал:
Кто-нибудь может помочь мне, как это исправить? Спасибо тебе!