net core Autofac 替换默认的服务容器 DI,微软自动的容器 不支持命名选项的

微软默认的容器,不支持命名选项,同一接口,多个实现。 就不支持了。

配置core 支持Autofac 容器

csharp 复制代码
using Autofac;
using Autofac.Extensions.DependencyInjection;

namespace WebApplication13
{
    public interface IMyService
    {
        string GetData();
    }

    public class MyService : IMyService
    {
        public string GetData()
        {
            return "Data from MyService---MyService";
        }
    }
    public class MyService2 : IMyService
    {
        public string GetData()
        {
            return "2222 from MyService---MyService2";
        }
    }
    public class MyApplicationModule : Module
    {
        protected override void Load(ContainerBuilder builder)
        {
            builder.RegisterType<MyService>().As<IMyService>();
        }
    }

    public class Program
    {
        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);
            // 在这里添加内置DI容器的服务配置
            // 例如,
            builder.Services.AddRazorPages();
            // 使用Autofac作为服务提供商
             builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory())
                   .ConfigureContainer<ContainerBuilder>(containerBuilder =>
                   {
                       // 在这里向Autofac容器注册服务  此处使用模块方式注入
                       containerBuilder.RegisterModule<MyApplicationModule>();
                   });
             Add services to the container.
            //builder.Services.AddRazorPages();
          
            var app = builder.Build();

            // Configure the HTTP request pipeline.
            if (!app.Environment.IsDevelopment())
            {
                app.UseExceptionHandler("/Error");
            }
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthorization();

            app.MapRazorPages();

            app.Run();
        }
    }
}
autofac 支持 命名 、key


csharp 复制代码
using Autofac;
using Autofac.Extensions.DependencyInjection;

namespace WebApplication13
{
    public interface IMyService
    {
        string GetData();
    }

    public class MyService : IMyService
    {
        public string GetData()
        {
            return "Data from MyService---MyService";
        }
    }
    public class MyService2 : IMyService
    {
        public string GetData()
        {
            return "2222 from MyService---MyService2";
        }
    }
    public class MyApplicationModule : Module
    {
        protected override void Load(ContainerBuilder builder)
        {
            builder.RegisterType<MyService>().As<IMyService>();
            builder.RegisterType<MyService>().As<IMyService>().Named<IMyService>(typeof(MyService).Name);
            //builder.RegisterType<MyService>().As<IMyService>().Keyed<IMyService>(typeof(MyService).Name);
            builder.RegisterType<MyService2>().As<IMyService>().Named<IMyService>(nameof(MyService2));
        }
    }

    public class Program
    {
        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);
            // 在这里添加内置DI容器的服务配置
            // 例如,
            builder.Services.AddRazorPages();
            // 使用Autofac作为服务提供商
             builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory())
                   .ConfigureContainer<ContainerBuilder>(containerBuilder =>
                   {
                       // 在这里向Autofac容器注册服务  此处使用模块方式注入
                       containerBuilder.RegisterModule<MyApplicationModule>();
                   });
             Add services to the container.
            //builder.Services.AddRazorPages();
          
            var app = builder.Build();

            // Configure the HTTP request pipeline.
            if (!app.Environment.IsDevelopment())
            {
                app.UseExceptionHandler("/Error");
            }
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthorization();

            app.MapRazorPages();

            app.Run();
        }
    }
}
相关推荐
2501_9151063213 分钟前
iOS 抓包全流程指南,HTTPS 抓包、TCP 数据流分析与多工具协同的方法论
android·tcp/ip·ios·小程序·https·uni-app·iphone
程序员 _孜然1 小时前
【最详细】android-studio-2025.2.x新版本,导出apk,含jks证书生成
android·ide·android studio
珹洺2 小时前
Java-Spring实战指南(三十四)Android Service实现后台音乐播放功能
android·java·spring
柯南二号2 小时前
【大前端】【Android】 Kotlin 语法超详细解析(2025 最新)
android·kotlin
四维碎片9 小时前
【Qt】配置安卓开发环境
android·开发语言·qt
百***99249 小时前
MySql的慢查询(慢日志)
android·mysql·adb
安卓兼职framework应用工程师9 小时前
android 15.0 Launcher3长按拖拽时,获取当前是哪一屏,获取当前多少个应用图标
android·拖拽·workspace·长按拖拽
q***71089 小时前
【Golang】——Gin 框架中的表单处理与数据绑定
microsoft·golang·gin
雨白9 小时前
Jetpack Compose Navigation3:返回栈管理、大屏适配与自定义策略
android
私人珍藏库12 小时前
Microsoft 远程桌面app,支持挂机宝,云主机服务器
运维·服务器·microsoft