使用 Autofac 在工作单元中进行依赖注入

Dependency Injection in Unit of work with Autofac

我正在学习使用 EF 6 和 UnitOfWork 模式的教程。我的想法是引入 Autofac,我不完全确定我应该如何转换这行代码,以便它适合引入依赖注入的项目

private readonly ContactsContext _context;

public UnitOfWork(ContactsContext context)
{
    _context = context;
    Customers = new CustomerRepository(_context);
}
   
public ICustomerRepository Customers { get; }

我无法改变

Customers = new CustomerRepository(_context);

Customers = new ICustomerRepository(_context);

注意接口,因为它会抛出错误

如果需要,我可以 post ICustomerRepository 但我不知道在这种情况下我应该如何处理依赖项?

如果需要,我可以 post 更多代码,但我不知道这是否足够,我是否遗漏了一些简单的东西?

执行此操作的标准方法是在 ICustomerRepository 上采用构造函数依赖性,而不是在构造函数中自己实例化 CustomerRepository

private readonly ContactsContext _context;
public UnitOfWork(ContactsContext context, ICustomerRepository customerRepository)
{
     _context = context;
     Customers = customerRepository;
}
   
public ICustomerRepository Customers { get; }

当然,你还需要用Autofac注册CustomerRepository作为ICustomerRepository的实现。

builder.RegisterType<CustomerRepository>().As<ICustomerRepository>();

这意味着您将依靠 Autofac 来创建存储库,而不是自己创建(Autofac 将 'know' 将 ContactsContext 注入 CustomerRepository 的构造函数中。这是依赖注入的普遍方面 - 它最终要求您采用它 all the way down