我这里有这样的层次结构:
public interface I<out T>
{
T GetItem();
}
public class C : I<Item1>, I<Item2>
{
Item1 I<Item1>.GetItem() => new Item1();
Item2 I<Item2>.GetItem() => new Item2();
}
public interface IItem { string Name { get; } }
public class Item1 : IItem { public string Name => "i1"; }
public class Item2 : IItem { public string Name => "i2"; }
要点是 C 类实现了两种形式的通用协变接口(interface)。
当我解析一个通用接口(interface)时,我希望 autofac 两次返回 C 类的单个实例:container.Resolve<IEnumerable<I<IItem>>>()
.如何实现?
顺便说一句,.NET 解析 (C as I<IItem>).GetItem()
作为I<Item1>.GetItem()
,
甚至 ((I<IItem>)(C as I<Item2>)).GetItem() == "i1"
最佳答案
我刚刚意识到这个问题毫无意义。主要思想是在 IEnumerable<I<IItem>>
中两次获取 C 的实例。 和有GetItem()
给予 Item1
对于第一项,Item2
第二个。但这是不可能的,.NET 类型不能那样工作。抱歉混淆。如果我错了,请纠正我。
关于c# - Autofac:如何解析一个类的所有通用接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51142931/