You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于继承的C# Autofac自动依赖注入实现方法咨询

实现Autofac自动注册继承IAmContainerRegistered的接口

核心思路

用一个空的标记接口IAmContainerRegistered来标识需要自动注册的接口,程序启动时扫描程序集,找出所有继承该接口的接口,再匹配对应的实现类(默认按接口名去掉首字母"I"的规则查找,比如ITest1对应Test1),最后批量注册到Autofac容器,省去手动编写每条注册语句的麻烦。

具体步骤

1. 定义标记接口

先创建一个空接口作为标记:

public interface IAmContainerRegistered
{
    // 空接口,仅用作标记
}

2. 编写自动注册逻辑

在配置Autofac容器的位置,添加扫描和批量注册的代码:

var builder = new ContainerBuilder();

// 扫描当前程序集,需扫描多个程序集时,可添加其他Assembly实例
var assembly = Assembly.GetExecutingAssembly();

// 筛选出所有继承IAmContainerRegistered的接口
var targetInterfaces = assembly.GetTypes()
    .Where(t => t.IsInterface && t.IsAssignableTo(typeof(IAmContainerRegistered)));

foreach (var @interface in targetInterfaces)
{
    // 按规则生成实现类名称:接口名去掉首字母"I"
    var implTypeName = @interface.Name.Substring(1);
    var implType = assembly.GetType($"{@interface.Namespace}.{implTypeName}");

    if (implType != null && !implType.IsAbstract)
    {
        // 注册实现类为对应接口,生命周期使用InstancePerRequest(适用于Web场景)
        builder.RegisterType(implType)
               .As(@interface)
               .InstancePerRequest();
    }
}

// 其他手动注册的业务代码可放在此处...

var container = builder.Build();

3. 示例验证

创建符合命名规则的接口和实现类:

// 接口继承标记接口
public interface ITest1 : IAmContainerRegistered
{
    void DoSomething();
}

public class Test1 : ITest1
{
    public void DoSomething()
    {
        // 业务逻辑实现
    }
}

public interface ITest2 : IAmContainerRegistered
{
    void DoAnotherThing();
}

public class Test2 : ITest2
{
    public void DoAnotherThing()
    {
        // 业务逻辑实现
    }
}

启动程序后,Autofac会自动完成Test1对应ITest1、Test2对应ITest2的注册,无需手动编写两条RegisterType语句。

额外注意事项

  • 如果实现类命名不遵循"去掉首字母I"的规则,需要调整implTypeName的生成逻辑,比如通过自定义特性标记实现类,或者修改命名匹配规则
  • 非Web项目请勿使用InstancePerRequest,可替换为InstancePerDependency(每次请求生成新实例)或其他适合的生命周期
  • 需扫描多个程序集时,可添加Assembly.Load("YourAssemblyName")到扫描集合中

内容的提问来源于stack exchange,提问作者lanes123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 04:35:13