Fork me on GitHub

Autofac 批量注册程序集下的服务

复制代码
public class AutofacModuleRegister : Autofac.Module
{
    protected override void Load(ContainerBuilder builder)
    {
        var basePath = AppContext.BaseDirectory;

        #region 带有接口层的服务注入

        var servicesDllFile = Path.Combine(basePath, "CoreCms.Net.Services.dll");
        var repositoryDllFile = Path.Combine(basePath, "CoreCms.Net.Repository.dll");

        if (!(File.Exists(servicesDllFile) && File.Exists(repositoryDllFile)))
        {
            var msg = "Repository.dll和Services.dll 丢失,因为项目解耦了,所以需要先F6编译,再F5运行,请检查 bin 文件夹,并拷贝。";
            throw new Exception(msg);
        }

        // 获取 Service.dll 程序集服务,并注册
        var assemblysServices = Assembly.LoadFrom(servicesDllFile);
        //支持属性注入依赖重复
        builder.RegisterAssemblyTypes(assemblysServices).AsImplementedInterfaces().InstancePerDependency()
            .PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies);

        // 获取 Repository.dll 程序集服务,并注册
        var assemblysRepository = Assembly.LoadFrom(repositoryDllFile);
        //支持属性注入依赖重复
        builder.RegisterAssemblyTypes(assemblysRepository).AsImplementedInterfaces().InstancePerDependency()
            .PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies);
        #endregion
    }
}

Program.cs
#region AutoFac注册============================================================================

builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
builder.Host.ConfigureContainer<ContainerBuilder>(containerBuilder =>
{
    //获取所有控制器类型并使用属性注入
    var controllerBaseType = typeof(ControllerBase);
    containerBuilder.RegisterAssemblyTypes(typeof(Program).Assembly)
        .Where(t => controllerBaseType.IsAssignableFrom(t) && t != controllerBaseType)
        .PropertiesAutowired();

    containerBuilder.RegisterModule(new AutofacModuleRegister());

});

#endregion
复制代码

 

posted @   WantRemake  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2021-09-18 .Net 调用 sqlserver 存储过程实例
点击右上角即可分享
微信分享提示