1. 构造注入
如果注册的类型构造方法参数中需要依赖其他自定义类型,那么 Unity 会在你调用 Resolve 时自动生成,并传递给目标构造参数。
}
}
输出:
Data constructor...
True
如果注册类型有多个构造方法时,我们可以用 InjectionConstructorAttribute 特性告知容器如何选择。
}
}
输出:
Constructor2...
如果不使用 InjectionConstructorAttribute,那么 Unity 默认会选择参数最多的那个构造方法。
}
}
输出:
Constructor3...
而如果有多个 "参数最多" 的构造方法时,那么就等着抛异常后改代码吧。o(∩_∩)o...
2. 属性注入
同样使用一个特性 DependencyAttribute,我们可以让容器自动替我们完成属性赋值操作。
}
}
输出:
Data constructor...
True
如果属性的类型已经在容器内注册,那么我们还可以使用 Dependency(name) 挑选合适的目标类型进行构造。
}
}
输出:
Data2 constructor...
True
3. 方法注入
方法注入更像一个被自动调用的初始化操作,当然这个方法也可以像构造方法那样拥有依赖类型参数。
}
}
输出:
Data constructor...
Initialize...
True
我们还可以利用 DependencyAttribute 特性指定方法(含构造方法)参数的注入类型。
}
}
输出:
Data2 constructor...
Initialize...
True