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

C# Autofac简单用法

时间:2023-03-26 11:04:37浏览次数:36  
标签:Autofac container C# builder 用法 var Assembly ContainerBuilder public

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

学无止境,精益求精

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

C# Autofac简单用法_程序集

 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://blog.51cto.com/u_15316082/6149928

相关文章

  • 解决mac升级之后不可以ssh
    很多同学更新系统之后,使用这两者都会遇到一条报错,类似于:SSH(ssh:connecttohostlocalhostport22:Connectionrefused)我们之前出过一篇文章但是现在也不好用了怎......
  • HelloWorld之Java调用C++(JNI)
    JNI(JavaNativeInterface),通过使用Java本地接口书写程序,可以确保代码在不同的平台上方便移植。1、java新建类HelloWorld,并声明native方法,引入hello的dllpublicclassHel......
  • HelloWorld之Java调用C++(JNI)
    JNI(JavaNativeInterface),通过使用Java本地接口书写程序,可以确保代码在不同的平台上方便移植。1、java新建类HelloWorld,并声明native方法,引入hello的dllpublicclassHel......
  • C++指针
    1指针的概念#include<iostream>usingnamespacestd;/*间接引用指针时,可获得该指针指向的变量内容本部分参考内容:C++程序设计教程钱能清华大学出版社*/void......
  • Above-the-Fold Loading 加载机制在 Spartacus Storefront 里的应用
    Angular应用默认情况下,Component组件总是被积极渲染,不管组件是否在用户的viewports中。这可能对性能带来负面影响,但可以通过评估视口与组件来进行优化——Viewports......
  • 五个实用的docker小工具
    在使用docker的过程中,除了dockerpull、dockerpush等常见命令外,还有一些实用的小工具帮助更好地使用docker,如:rekcodrunlikeget_command_4_run_containerwhalerdiver......
  • python基础:split、join、replace、remove、del、pop、index小记python 字符串的split(
    这里总结了平时写脚本时经常用到的一些基础方法,做个记录1、split()函数可以基于分隔符将字符串分割成由若干子串组成的列表str.split(str="",num=string.count(str))str......
  • 本地构建和发布 Spartacus libraries 所需要的两个工具
    详细步骤参考这篇文档。本文介绍了如何检查Spartacus源代码、在本地构建库,然后使它们可供安装。这允许开发人员使用已编译的Spartacus库,因此不再需要从npm存储库访......
  • openai chatgpt
    流程想要在微信中接入 ChatGPT 我们需要如下几个步骤成功注册一个 OpenAi 的账号,获取的到一个 APIkey;基于开源项目 wechatbot 运行一个微信机器人程序;用微信扫码登......
  • Audition 2022 for mac (au音频编辑) v22.6中文版
    Audition2022中文版已更新,au用于创建、混合、编辑和恢复音频内容的多轨、波形和频谱显示,最新创建、混合、编辑和恢复音频内容的多轨、波形和频谱显示,这款功能强大的音频工......