这里主要学习一下Autofac的依赖注入方式
默认构造函数注入
class AutofacInjectTest { static void Main(string[] args) { var builder = new ContainerBuilder(); builder.RegisterType<A>(); builder.RegisterType<B>(); var container = builder.Build(); var a = container.Resolve<A>(); //A的构造方法需要参数b,但是这里不需要做更多地操作 } } class A { private B _b; public A(B b) { this._b = b; } } class B { }
class AutofacInjectTest { static void Main(string[] args) { var builder = new ContainerBuilder(); builder.RegisterType<A>(); builder.RegisterType<B>(); var container = builder.Build(); var a = container.Resolve<A>(); //A的构造方法需要参数b,但是这里不需要做更多地操作 } } class A { private B _b; public A(B b) { this._b = b; } } class B { }
如果类型A和类型B都注册到了autofac中,那么在通过autofac解析获取A时,autofac会检测到A的构造方法中是要一个参数B,而类型B是已经注册到autofac中的,所以autofac会自动创建b参数,然后传入A的构造方法中的。这样,autofac就自动帮我们完成了构造注入的工作
属性注入
属性注入的所有注入方式都是在注册时定义的,不像构造注入那般,可以在Resolve时传参注入。构造器注入是默认行为,不需要设置,默认会去检查,而属性注入并不是默认行为。但是我们可以通过设置,让属性注入也成为自动注入。