Asp.net mvc 5 Autofac注册表类型,接口和类名称相同,接口前缀为I

Asp.net mvc 5 Autofac注册表类型,接口和类名称相同,接口前缀为I,asp.net-mvc-5,autofac,Asp.net Mvc 5,Autofac,我目前正在实现asp.net mvc应用程序。我正在使用Autofac DI,希望检查我是否有与i同名前缀的类和接口。因此,要解决每个注册问题,是否需要为每个接口添加映射项。目前项目有50多个班级 谢谢 Nik您可以在Starup中使用反射根据您的约定检查名称 我也做了类似的工作,但检查了属性的存在性: private static void RegisterServices() { var serviceList = AppDomain.CurrentDomain.GetAssembl

我目前正在实现asp.net mvc应用程序。我正在使用Autofac DI,希望检查我是否有与i同名前缀的类和接口。因此,要解决每个注册问题,是否需要为每个接口添加映射项。目前项目有50多个班级

谢谢
Nik

您可以在Starup中使用反射根据您的约定检查名称

我也做了类似的工作,但检查了属性的存在性:

private static void RegisterServices()
{
    var serviceList = AppDomain.CurrentDomain.GetAssemblies()
        .Where(aa => aa.FullName.IndexOf("DI.Web.Ex09", StringComparison.Ordinal) > -1)
        .SelectMany(a =>
            a.GetTypes()
            .Where(t => t.HasAttribute(typeof(InjectAttribute)) && t.IsPublic)
        );

    foreach (var t in serviceList)
    {
        var attribs = t.GetCustomAttributes<InjectAttribute>();
        foreach (var attrib in attribs)
        {
            _builder.RegisterType(t)
                .As(attrib.BindingType).InstancePerRequest();
        }
    }
}
private static void RegisterServices()
{
var serviceList=AppDomain.CurrentDomain.getAssemblys()
.Where(aa=>aa.FullName.IndexOf(“DI.Web.Ex09”,StringComparison.Ordinal)>-1)
.SelectMany(a=>
a、 GetTypes()
.Where(t=>t.HasAttribute(typeof(InjectAttribute))&&t.IsPublic)
);
foreach(serviceList中的var t)
{
var attribs=t.GetCustomAttributes();
foreach(attribs中的var attrib)
{
_生成器注册表类型(t)
.As(attrib.BindingType).InstancePerRequest();
}
}
}
请参见此处的完整示例: