I have such an hierarchy here:
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实现了一个通用协变接口的两种形式。
我希望autofac在解析公共接口时,
container.Resolve<IEnumerable<I<IItem>>>()
能够返回类C的单个实例两次。如何实现这一点?顺便提一下,.NET将
(C as I<IItem>).GetItem()
解析为I<Item1>.GetItem()
,即使((I<IItem>)(C as I<Item2>)).GetItem() == "i1"
也是如此。
IItem
派生的具体类型TItem
,为每个类型解析IEnumerable<I<TItem>>
,然后连接结果,但我认为这是最后的选择。 - tsul