当前位置: 首页 > article >正文

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

微软默认的容器,不支持命名选项,同一接口,多个实现。 就不支持了。
在这里插入图片描述

配置core 支持Autofac 容器

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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();
        }
    }
}

在这里插入图片描述


http://www.kler.cn/a/385089.html

相关文章:

  • Linux的基本指令(一)
  • 【CUDA】线程配置
  • C++编程法则365天一天一条(27)std::initializer_list 轻量级初始化列表
  • 『Django』初识前后端分离
  • uni生成海报并保存
  • 法语nous sommes
  • Spring框架---JDBC模板技术
  • 新华三H3CNE网络工程师认证—VLAN的配置
  • 23种设计模式总结
  • PyQt6应用程序中,如何实现多种语言支持
  • ajax关于axios库的运用小案例
  • 网页版五子棋——匹配模块(客户端开发)
  • 一、文心一言问答系统为什么要分对话,是否回学习上下文?二、文心一言是知识检索还是大模型检索?三、文心一言的词向量、词语种类及多头数量
  • Python中处理Excel的基本概念(如工作簿、工作表等)
  • 【数据结构】一文讲解线性表之顺序表概念及其基本操作(附C语言源码)
  • 鸿蒙的进击之路
  • 享元模式在 JDK 中的应用解析
  • MySQL 多数据库备份与恢复,包括查询,函数,SP
  • 笔记--(5)、acl ACL
  • 哈希表(Hash Table)、跳表(Skip List) 和 有序字典(Ordered Dictionary) 的详细介绍
  • 51c大模型~合集17
  • 当RFID技术遇上消防应急管理,智慧响应来袭!
  • node.js实现批量修改git项目的数据源
  • ffmpeg命令——从wireshark包中的rtp包中分离h264
  • 云原生+AI核心技术&最佳实践
  • 外包干了2年,快要废了。。