我在这里有这样的层次结构:
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在解析公共接口时两次返回C类的单个实例:container.Resolve< IEnumerable< I< IItem>>>().怎么做到这一点?
BTW,.NET解析(C为I< IItem>).GetItem()为I< Item1> .GetItem(),
even((I< IItem>)(C as I< Item2>)).GetItem()==“i1”
解决方法:
我刚刚意识到问题是没有意义的.主要思想是在IEnumerable< I< IItem>>中获得C的两次实例.并让GetItem()为第一个项目提供Item1,为第二个项目提供Item2.但这是不可能的,.NET类型不会那样工作.抱歉令人困惑.如果我错了,请纠正我.