我在这里有这样的层次结构:
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实现了两种形式的通用协变接口。
当我解析一个公共接口container.Resolve<IEnumerable<I<IItem>>>()
时,我希望autofac两次向我返回C类的单个实例。如何实现呢?
顺便说一句,.NET将(C as I<IItem>).GetItem()
解析为I<Item1>.GetItem()
,
甚至((I<IItem>)(C as I<Item2>)).GetItem() == "i1"
答案 0 :(得分:0)
我刚刚意识到这个问题是没有道理的。主要思想是在IEnumerable<I<IItem>>
和中两次获取C的实例,以使GetItem()
为第一项赋予Item1
,并为Item2
第二。但是,.NET类型不可能那样工作。抱歉造成混淆。请纠正我,如果我错了。