gpt4 book ai didi

c# - 使用 Unity 填充集合的方法

转载 作者:可可西里 更新时间:2023-11-01 07:49:41 27 4
gpt4 key购买 nike

我有两个示例类

class ClassToResolve
{
private List<CollectionItem> _coll;

public ClassToResolve(List<CollectionItem> coll)
{
_coll = coll;
}
}

class CollectionItem
{
//...
}

我需要解析 ClassToResolve

var classToResolve = new ClassToResolve(
new List<CollectionItem>()
{
new CollectionItem(),
new CollectionItem(),
new CollectionItem()
}

);

现在我以某种方式解决它

var classToResolve = new ClassToResolve(
new List<CollectionItem>()
{
unity.Resolve<CollectionItem>(),
unity.Resolve<CollectionItem>(),
unity.Resolve<CollectionItem>()
}
);

有没有办法使用动态注册来解决 ClassToResolve 与 Unity 的问题?

最佳答案

Unity 会理解 T[] (数组)依赖项是事物的列表(但不是 IEnumerable<T> ,也不是 List<T> )。当您更改 ClassToResolve 的构造函数时采取CollectionItem[]而不是 List<CollectionItem>你可以配置你的 CollectionItem类型如下:

container.RegisterType<CollectionItem, CollectionItemA>("a");
container.RegisterType<CollectionItem, CollectionItemB>("b");
container.RegisterType<CollectionItem, CollectionItemC>("c");
container.RegisterType<CollectionItem, CollectionItemD>("d");

这里的技巧是命名所有注册。默认(无名)注册永远不会成为 Unity 中序列依赖的一部分。

现在你可以解决ClassToResolve无需注册:

container.Resolve<ClassToResolve>();

如果你宁愿注入(inject) List<CollectionItem>您可以添加以下注册:

container.RegisterType<IList<CollectionItem>, CollectionItem[]>();

对于 IEnumerable<CollectionItem>您可以添加以下行:

container
.RegisterType<IEnumerable<CollectionItem>, CollectionItem[]>();

关于c# - 使用 Unity 填充集合的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6304355/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com