zoukankan      html  css  js  c++  java
  • .NET手记-Autofac进阶(属性和方法注入 Property and Method Injection)

    尽管构造函数参数注入是传递参数值给当前构造的组件的优先方式,但是你也可以使用属性或者方法注入来提供参数值。

    属性注入使用可写入的变量而不是构造函数参数来完成注入。方法注入则通过方法来设置依赖项。

    属性注入 Property Injection

    如果组建是Lambda表达式组件,那么对象可以像下面这样初始化:

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

    为了支持循环依赖(circular dependencies),需要使用Activatd事件处理方法:

    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);

    方法注入 Method Injection

    最简单的调用方法给组件赋值的方式是Lambda表达式,同时在对应方法中正确处理:

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

    如果你不使用Lambda表达式,那也可以通过Activating事件处理方法来实现注入:

    builder
      .Register<MyObjectType>()
      .OnActivating(e => {
        var dep = e.Context.Resolve<TheDependency>();
        e.Instance.SetTheDependency(dep);
      });
  • 相关阅读:
    cf1100 F. Ivan and Burgers
    cf 1033 D. Divisors
    LeetCode 17. 电话号码的字母组合
    LeetCode 491. 递增的子序列
    LeetCode 459.重复的子字符串
    LeetCode 504. 七进制数
    LeetCode 3.无重复字符的最长子串
    LeetCode 16.06. 最小差
    LeetCode 77. 组合
    LeetCode 611. 有效三角形个数
  • 原文地址:https://www.cnblogs.com/mantgh/p/5126481.html
Copyright © 2011-2022 走看看