班上
public class CustomerRepository : ICustomer
{
public CustomerRepository(IEmailManager emailManager)
{
...
}
}
Autofac 配置
var builder = new ContainerBuilder();
builder.RegisterModule<AutofacWebTypesModule>();
builder.RegisterType<EmailManager>()
.As<IEmailManager>()
.SingleInstance();
builder.RegisterType<CustomerRepository>()
.As<ICustomer>();
foreach (var assembly in assemblies)
{
builder.RegisterAssemblyTypes(assembly)
.Except<CustomerRepository>()
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces();
}
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
让我们忽略存储库不应该向客户发送电子邮件。不是我的代码。它正在重构。
如果我使用 foreach 循环注册程序集类型,则在创建 CustomerRepository 时,电子邮件管理器始终为空。
如果我删除循环以注册程序集类型,则会使用有效的电子邮件管理器创建 CustomerRepository。
为什么调用 RegisterAssemblyTypes 会阻止创建电子邮件管理器?
我尝试过的事情,
- 首先注册程序集类型。然后是个别类型。
- 从 RegisterAssemblyTypes 查询中删除 except 子句。
- 在没有 SingleInstance 约束的情况下注册 EmailManager。