C# 与Autofac的默认约定
我不确定我是否遗漏了什么,但在任何地方都找不到答案。 在structuremap中,我可以执行以下操作:C# 与Autofac的默认约定,c#,dependency-injection,autofac,C#,Dependency Injection,Autofac,我不确定我是否遗漏了什么,但在任何地方都找不到答案。 在structuremap中,我可以执行以下操作: x.Scan(scan => { scan.TheCallingAssembly(); scan.WithDefaultConventions(); }); 这实际上意味着:“如果在扫描时我发现一个接口是ISa
x.Scan(scan =>
{
scan.TheCallingAssembly();
scan.WithDefaultConventions();
});
这实际上意味着:“如果在扫描时我发现一个接口是ISampleClass,并且有一个实现ISampleClass的类型SampleClass,那么将SampleClass注册为ISampleClass的默认类型”
如何使用Autofac进行此操作
Autofac似乎提供了以下功能:
builder.RegisterAssemblyTypes(assemblies)
.AsImplementedInterfaces();
它将找到的所有接口注册到它找到的任何具体类型。
有没有一种方法可以像structuremap那样基于类和接口的名称进行智能注册
这似乎是任何DI框架的基本要求。Where方法应该适合您的需要
builder.RegisterAssemblyTypes(assemblies)
.Where(t => t.Name.EndsWith("XXX"))
.AsImplementedInterfaces();
顺便说一下,您还可以使用As
方法,在这种情况下,该方法将充当过滤器
builder.RegisterAssemblyTypes(assemblies)
.As<IFoo>();
builder.RegisterAssemblyTypes(程序集)
.As();
只有实现IFoo
的类型才会被注册
您可以在上找到有关部件扫描的详细信息