问题描述
我有两个示例类
class ClassToResolve
{
private List<CollectionItem> _coll;
public ClassToResolve(List<CollectionItem> coll)
{
_coll = coll;
}
}
class CollectionItem
{
//...
}
我需要解析 ClassToResolve
and I need to resolve ClassToResolve
var classToResolve = new ClassToResolve(
new List<CollectionItem>()
{
new CollectionItem(),
new CollectionItem(),
new CollectionItem()
}
);
现在我以某种方式解决它
Now I resolve it in a way
var classToResolve = new ClassToResolve(
new List<CollectionItem>()
{
unity.Resolve<CollectionItem>(),
unity.Resolve<CollectionItem>(),
unity.Resolve<CollectionItem>()
}
);
有没有办法使用动态注册在 Unity 中解析 ClassToResolve?
Is there a way to resolve ClassToResolve with Unity using dynamic registration?
推荐答案
Unity 将理解 T[]
(数组)依赖项是一个事物列表(但不是 IEnumerable
,也不是 List
).当您将 ClassToResolve
的构造函数更改为采用 CollectionItem[]
而不是 List
时,您可以配置您的 CollectionItem
类型如下:
Unity will understand that T[]
(array) dependencies are a list of things (but not IEnumerable<T>
, nor List<T>
). When you change the constructor of ClassToResolve
to take an CollectionItem[]
instead of a List<CollectionItem>
you can configure your CollectionItem
types as follows:
container.RegisterType<CollectionItem, CollectionItemA>("a");
container.RegisterType<CollectionItem, CollectionItemB>("b");
container.RegisterType<CollectionItem, CollectionItemC>("c");
container.RegisterType<CollectionItem, CollectionItemD>("d");
这里的技巧是为所有注册命名.默认(无名)注册永远不会成为 Unity 中序列依赖项的一部分.
The trick here is to name all the registrations. A default (nameless) registration will never be part of a sequence dependency in Unity.
现在您无需注册即可解析ClassToResolve
:
Now you can resolve ClassToResolve
without the need to register it:
container.Resolve<ClassToResolve>();
如果您更愿意注入List
,您可以添加以下注册:
If you rather inject List<CollectionItem>
you can add the following registration:
container.RegisterType<IList<CollectionItem>, CollectionItem[]>();
对于 IEnumerable
,您可以添加以下行:
And for IEnumerable<CollectionItem>
you can add the following line:
container
.RegisterType<IEnumerable<CollectionItem>, CollectionItem[]>();
这篇关于使用 Unity 填充集合的方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
更多推荐
[db:关键词]
发布评论