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();
        }
    }
}
相关推荐
Estar.Lee2 小时前
查手机号归属地免费API接口教程
android·网络·后端·网络协议·tcp/ip·oneapi
温辉_xh3 小时前
uiautomator案例
android
工业甲酰苯胺4 小时前
MySQL 主从复制之多线程复制
android·mysql·adb
少说多做3434 小时前
Android 不同情况下使用 runOnUiThread
android·java
Estar.Lee5 小时前
时间操作[计算时间差]免费API接口教程
android·网络·后端·网络协议·tcp/ip
找藉口是失败者的习惯6 小时前
从传统到未来:Android XML布局 与 Jetpack Compose的全面对比
android·xml
Jinkey7 小时前
FlutterBasic - GetBuilder、Obx、GetX<Controller>、GetxController 有啥区别
android·flutter·ios
大白要努力!9 小时前
Android opencv使用Core.hconcat 进行图像拼接
android·opencv
A_cot10 小时前
理解设计模式与 UML 类图:构建稳健软件架构的基石
microsoft·设计模式·简单工厂模式·工厂方法模式·uml
天空中的野鸟10 小时前
Android音频采集
android·音视频