hiimda95 Ответов: 1

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'.


Что я уже пробовал:

Кто-нибудь может помочь мне, как это исправить? Спасибо тебе!

1 Ответов

Рейтинг:
0

hiimda95

Я все исправил. Я допустил ошибку, когда создавал файл UnitOfWork. конструктору необходимо создать общественные.