【问题标题】:Autofac Resolve<IEnumerable<T>>() returns empty listAutofac Resolve<IEnumerable<T>>() 返回空列表
【发布时间】:2012-01-25 00:58:08
【问题描述】:

我已经阅读了很多 Autofac 文档/wiki,它们表明我可以通过执行如下所示的简单操作来获取所有已注册类型的列表:

var builder = new ContainerBuilder();
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
                .AssignableTo<IPersistedModel>();
var container = builder.Build();
var allTypes = container.Resolve<IEnumerable<IPersistedModel>>();

问题是 allTypes 是空的。

在调试器中,我可以看到容器内部有 7 种匹配类型,甚至还有一个 IPersistedModel 数组...但它们不会在 Resolve() 上返回。

我错过了什么?

【问题讨论】:

    标签: c# .net autofac


    【解决方案1】:

    您需要将类型注册为接口,使用.As&lt;IPersistedModel&gt;() 或使用.AsImplementedInterfaces() 的所有接口:

    builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
                .AssignableTo<IPersistedModel>()
                .AsImplementedInterfaces();
    

    【讨论】:

    • 我相信至少在 3.5 中没有 AssignableTo&lt;IPersistedModel&gt;() 也能正常工作
    • @arviman 是的,它会的。这只是为了限制注册的类型(没有它,它会在程序集中注册 all 类型,这可能不是你想要的)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    相关资源
    最近更新 更多