使用Unity的InjectionFactory进行依赖注入遇到如下提示:
‘InjectionFactory’ is obsolete: ‘InjectionFactory has been deprecated and will be removed in next release. Please use IUnityContainer.RegisterFactory(…) method instead.
提示InjectionFactory将被淘汰的注入代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| var container = new UnityContainer();
container.RegisterType<IAnimal, Cat>("Cat", new InjectionConstructor());
container.RegisterType<IAnimal, Dog>("Dog", new InjectionConstructor());
container.RegisterType<List<IAnimal>>(
"AnimalList",
new InjectionFactory(
m => new List<IAnimal>
{
m.Resolve<IAnimal>("Cat"),
m.Resolve<IAnimal>("Dog"),
}
)
);
|
改为RegisterFactory之后的注入代码:
1
2
3
4
5
6
7
8
| container.RegisterFactory<List<IAnimal>>(
"AnimalList",
m => new List<IAnimal>
{
m.Resolve<IAnimal>("Cat"),
m.Resolve<IAnimal>("Dog"),
}
);
|
两段代码比较,区别在于将"RegisterType"方法替换为"RegisterFactory"方法,并将InjectionFactory这层的wrapper去除即可。
比较下RegisterType和RegisterFactory的构造函数,也可以看出diff:
1
2
3
4
| IUnityContainer RegisterType<T>(this IUnityContainer container, string name, params InjectionMember[] injectionMembers);
InjectionFactory(Func<IUnityContainer, object> factoryFunc);
IUnityContainer RegisterFactory<TInterface>(this IUnityContainer container, string name, Func<IUnityContainer, object> factory, IFactoryLifetimeManager lifetimeManager = null);
|