C# 与Autofac的默认约定

C# 与Autofac的默认约定,c#,dependency-injection,autofac,C#,Dependency Injection,Autofac,我不确定我是否遗漏了什么,但在任何地方都找不到答案。 在structuremap中,我可以执行以下操作: x.Scan(scan => { scan.TheCallingAssembly(); scan.WithDefaultConventions(); }); 这实际上意味着:“如果在扫描时我发现一个接口是ISa

我不确定我是否遗漏了什么,但在任何地方都找不到答案。 在structuremap中,我可以执行以下操作:

                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
的类型才会被注册

您可以在上找到有关部件扫描的详细信息