首页 > 编程语言 >C# Autofac简单用法

C# Autofac简单用法

时间:2023-02-07 11:23:19浏览次数:44  
标签:Autofac container C# builder 用法 var Assembly ContainerBuilder public

十年河东,十年河西,莫欺少年穷

学无止境,精益求精

新建一个控制台程序,如下

 MyAutoFac项目 引用Nuget autofac V6.5版本

新建如下接口:

    public interface 动物
    {
        void 叫声();

        public virtual void 干饭()
        {
            Console.WriteLine("吃主人准备好的饭菜");
        }
    }

实现类如下:

namespace MyService
{
    public class 狗 : 动物
    {
        public void 叫声()
        {
            Console.WriteLine("汪汪汪");
        }

        public void 干饭()
        {
            Console.WriteLine("偶尔吃屎");
        }
    }

    public class 猫 : 动物
    {
        public void 叫声()
        {
            Console.WriteLine("喵喵喵");
        }
    }
}

1、注入普通类

{
    //注册一个普通类
    ContainerBuilder builder = new ContainerBuilder();
    builder.RegisterType<狗>().As<狗>();
    IContainer container = builder.Build();
    var 二哈 = container.Resolve<狗>();
    二哈.干饭();
}

2、注入接口及实现类

{
    //注册接口,及实现类
    ContainerBuilder builder = new ContainerBuilder();
    builder.RegisterType<猫>().As<动物>();
    IContainer container = builder.Build();
    var 中华田园猫 = container.Resolve<动物>();
    中华田园猫.叫声();
}

3、通过程序集注入

3.1、仅注入service层

{
    //通过程序集加载-->只加载Service
    ContainerBuilder builder = new ContainerBuilder();
    Assembly assemblyService = Assembly.LoadFrom("MyService.dll");
    builder.RegisterAssemblyTypes(assemblyService).AsSelf();
    IContainer container = builder.Build();
    var 中华田园猫 = container.Resolve<猫>();
    中华田园猫.叫声();

    var 哈士奇 = container.Resolve<狗>();
    哈士奇.叫声(); 
}

3.2、注入接口层和实现层

因为存在一个接口多个实现类,因此,需要解析为对象集合IEnumerable<动物>

{
    //通过程序集加载
    ContainerBuilder builder = new ContainerBuilder();
    Assembly assemblyInterface = Assembly.LoadFrom("MyInterface.dll");
    Assembly assemblyService = Assembly.LoadFrom("MyService.dll");
    builder.RegisterAssemblyTypes(assemblyInterface, assemblyService).AsImplementedInterfaces();
    IContainer container = builder.Build();
    //---> 动物下的基类有猫和狗
    var 动物集合 = container.Resolve<IEnumerable<动物>>();
    foreach (var item in 动物集合)
    {
        item.干饭();
    }
}

@天才卧龙的波尔卡

标签:Autofac,container,C#,builder,用法,var,Assembly,ContainerBuilder,public
From: https://www.cnblogs.com/chenwolong/p/17097770.html

相关文章

  • corn表达式
    corn表达式的值所处的位置不同,对应不同的时间单位,从左到右依次是:秒分时日月周年(其中年可以省略不写;周表示周一、周二等,与日相矛盾,使用时注意)*表示每一时间单位都......
  • 看我是如何用C#编写一个小于8KB的贪吃蛇游戏的
    译者注:这是MichalStrehovský大佬的一篇文章,他目前在微软.NETRuntime团队工作,主要是负责.NETNativeAOT功能的开发。我在前几天看到这篇文章,非常喜欢,虽然它的内容稍微......
  • 算法随想Day5【哈希表】| LC242-有效的字母异位词、LC349-两个数组的交集、LC202-快乐
    哈希表理论知识C++常见的三种哈希结构数组set(集合)map(映射)在C++中,set和map分别提供以下三种数据结构,其底层实现以及优劣如下表所示:集合底层实现是否有序数......
  • gRPC入门与实操(.NET篇)
    为什么选择gRPC历史长久以来,我们在前后端交互时使用WebApi+JSON方式,后端服务之间调用同样如此(或者更久远之前的WCF+XML方式)。WebApi+JSON是优选的,很重要的一点......
  • javaScript - String对象的创建,全部属性,常用方法,全部方法
    1.String对象的创建//方式1字面量方式varstr="levi";//方式2创建对象方式varstr=newString("levi"); 2.String对象的属性:属性描述constructor对创建......
  • CentOS 7 安装配置git
    安装yuminstallgit-y验证[root@localhost~]#git--versiongitversion1.8.3.1[root@localhost~]#配置基本信息//配置基本信息[root@localhost~]#gi......
  • C#.NET 4.8 WEBP 转 GIF
    C#.NET4.8WEBP转GIF项目是.NET4.8。nuget引用 Magick.NET-Q16-AnyCPU,版本:7.14.5。高版本,如:12.2已经不支持.NETFRAMEWORK了。usingImageMagick;usingSyste......
  • ECMAScript 是什么?
    ECMAScript是什么简介Ecma标准定义了ECMAScript语言ECMAScript基于多种原始技术,最著名的是JavaScript(Netscape)和JScript(Microsoft)ECMAScript以嵌入We......
  • docker 多核环境上批量创建容器慢
    多核系统批量创建容器导致容器创建时间长packagemainimport( "fmt" "os/exec" "sync" "time")funcmain(){ cmd:=exec.Command("sh","-c","dockerrm-......
  • chrome、Edge浏览器显示“您的浏览器受管理”是被植入病毒或其它程序了吗?
    这是被植入病毒吗?我经常使用Chrome插件,有些插件调皮设置了这个用来重定向你的网址链接,从而实现广告收入打开chrome://management/查看如否处于托管状态打开chrome://po......