猿教程 Logo

Autofac教程:属性和方法注入

虽然构造函数参数注入是将值传递给正在构造的组件的首选方法,但您也可以使用属性或方法注入来提供值。

属性注入使用可写属性而不是构造函数来执行注入。 方法注入通过调用方法来设置依赖关系。


属性注入

如果组件是lambda表达式组件,请使用对象初始化程序:

builder.Register(c => new A { B = c.Resolve<B>() });

要支持循环依赖关系,请使用激活的事件处理程序:

builder.Register(c => new A()).OnActivated(e => e.Instance.B = e.Context.Resolve<B>());

如果组件是反射组件,则使用PropertiesAutowired()修饰符来注入属性:

builder.RegisterType<A>().PropertiesAutowired();

如果您有一个特定的属性和值来连接,可以使用WithProperty()修饰符:

builder.RegisterType<A>().WithProperty("PropertyName", propertyValue);

方法注入

调用方法在组件上设置值的最简单的方法是使用lambda表达式组件,并在激活器中处理方法调用:

builder.Register(c => {
  var result = new MyObjectType();
  var dep = c.Resolve<TheDependency>();
  result.SetTheDependency(dep);
  return result;
});

如果您不能使用注册lambda,则可以添加激活事件处理程序:

builder
  .Register<MyObjectType>()
  .OnActivating(e => {
    var dep = e.Context.Resolve<TheDependency>();
    e.Instance.SetTheDependency(dep);
  });


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Autofac/prop-method-injection.html