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

@天才臥龍的波爾卡

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