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.干饭(); } }
@天才卧龙的波尔卡