从IOC </t>返回实例化类的列表<t>

时间:2012-02-06 10:17:37

标签: c# .net inversion-of-control autofac

我正在研究使用IOC容器,但我正在处理遗留代码,到处都有CreateInstance个负载,然后用该类完成。

有没有办法可以让IOC容器返回它已实例化的类列表,这样当前使用的方法可以继续执行它们的事情而不需要CreateInstance

例如,Autofac将使用类似于下面的代码扫描一个程序集/一组程序集,我只是想知道它是否可以返回它创建的类的List<T>

var dataAccess = Assembly.GetExecutingAssembly();

builder.RegisterAssemblyTypes(dataAccess)
    .Where(t => t.Name.EndsWith("Repository"))
    .AsImplementedInterfaces();

更新:我只是决定要使用哪个IOC,但需要上述功能告诉我实例化了哪些类。

2 个答案:

答案 0 :(得分:1)

其中一个标签表示你正在使用Autofac。所以我相信你可以访问IContainer。 Autofac跟踪它创建的每个对象的实例。看看它的范围。有关更多信息,请阅读文档http://code.google.com/p/autofac/wiki/OwnedInstances

我发现了一个关于Autofac的好博客,也许你可以阅读它来了解LifeTimeScopes等 http://nblumhardt.com/2011/01/an-autofac-lifetime-primer/

答案 1 :(得分:0)

你的意思是

var classes = _container.Resolve<IEnumerable<YourClassType>>().ToList();

只要导出YourClassType的所有类都已注册为它,上述语法就会起作用。

_container.Resolve<IEnumerable<T>>()告诉autofac解析所有实现T的类。