Autofac:如何解析类的所有通用接口

时间:2018-07-02 19:54:59

标签: c# .net autofac

我在这里有这样的层次结构:

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"

1 个答案:

答案 0 :(得分:0)

我刚刚意识到这个问题是没有道理的。主要思想是在IEnumerable<I<IItem>> 中两次获取C的实例,以使GetItem()为第一项赋予Item1,并为Item2第二。但是,.NET类型不可能那样工作。抱歉造成混淆。请纠正我,如果我错了。