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

@天才卧龙的波尔卡

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章