c# - Autofac:如何解析一个类的所有通用接口(interface)

标签 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 类实现了两种形式的通用协变接口(interface)。

当我解析一个通用接口(interface)时,我希望 autofac 两次返回 C 类的单个实例:container.Resolve<IEnumerable<I<IItem>>>() .如何实现?

顺便说一句,.NET 解析 (C as I<IItem>).GetItem()作为I<Item1>.GetItem() ,
甚至 ((I<IItem>)(C as I<Item2>)).GetItem() == "i1"

最佳答案

我刚刚意识到这个问题毫无意义。主要思想是在 IEnumerable<I<IItem>> 中两次获取 C 的实例。 GetItem()给予 Item1对于第一项,Item2第二个。但这是不可能的,.NET 类型不能那样工作。抱歉混淆。如果我错了,请纠正我。

关于c# - Autofac:如何解析一个类的所有通用接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51142931/

相关文章:

configuration - 使用 web.config 在 Autofac 中注册工厂类

asp.net-mvc - Autofac (+MVC + EF + SignalR + Hangfire) 生命周期范围

c# - 如何使用 .NET (Windows/Mac/Linux) 将 PCM S16LE 音频转换为 MU-LAW/8000

c# - 如何在代码隐藏中设置 DataGrid 行的背景颜色?

c# - 为什么在 LINQ 扩展方法中对实际迭代器函数使用包装器?

c# - 仅当使用 .NET 匹配另一个单独的过滤器时,如何执行正则表达式替换?

c# - 为什么return后代码还在运行

.net - EF6 与旧版 SQL 数据库中的 2 个表的一对多关系

.net - 是否可以部分安装.Net Framework?

c# - Autofac Resolve<IEnumerable<T>>() 返回空列表