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

4

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"也是如此。

也许问题可以简化一下。假设我们有两个简单的非泛型接口I1、I2,它们都派生自一个公共接口I,还有一个实现它们的类C。如何使用autofac在IEnumerable<I>中获取两个C的实例,第一个作为I1,第二个作为I2?(虽然这不是我需要的,但我猜它可能有助于解决原始问题)。 - tsul
此外,我知道我可以找到(或解析)所有从IItem派生的具体类型TItem,为每个类型解析IEnumerable<I<TItem>>,然后连接结果,但我认为这是最后的选择。 - tsul
1个回答

0

我刚意识到这个问题没有意义。主要想法是在 IEnumerable<I<IItem>> 中获取 C 的两个实例,并且让 GetItem() 方法为第一个项目提供 Item1,为第二个项目提供 Item2。但这是不可能的,.NET 类型不是这样工作的。如果我错了,请纠正我。抱歉让您感到困惑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接