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();
        }
    }
}
相关推荐
我是好小孩4 小时前
Android-侧边导航栏的使用
android·gitee
吗喽对你问好4 小时前
安卓基础布局核心知识点整理
android·gitee
安卓开发者4 小时前
Android Material Components 全面解析:打造现代化 Material Design 应用
android
教程分享大师4 小时前
带root权限_中国移动创维DT541_S905L3融合机器改机顶盒刷机教程 当贝纯净版安卓9.0系统线刷包 刷机包
android
wuk9984 小时前
Android:UI:Drawable:View/ImageView与Drawable
android·ui
whysqwhw5 小时前
Kotlin 中作用域函数 let、with、run、also、apply 的核心使用指南
android
旋风菠萝6 小时前
设计模式---单例
android·java·开发语言
whysqwhw7 小时前
Android Jetpack 中 ViewModel 的全面解析
android
2501_9160074710 小时前
iPhone查看App日志和系统崩溃日志的完整实用指南
android·ios·小程序·https·uni-app·iphone·webview
稻草人不怕疼10 小时前
Android 渲染机制小结
android