我正在研究使用IOC容器,但我正在处理遗留代码,到处都有CreateInstance
个负载,然后用该类完成。
有没有办法可以让IOC容器返回它已实例化的类列表,这样当前使用的方法可以继续执行它们的事情而不需要CreateInstance
例如,Autofac将使用类似于下面的代码扫描一个程序集/一组程序集,我只是想知道它是否可以返回它创建的类的List<T>
。
var dataAccess = Assembly.GetExecutingAssembly();
builder.RegisterAssemblyTypes(dataAccess)
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces();
更新:我只是决定要使用哪个IOC,但需要上述功能告诉我实例化了哪些类。
答案 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
的类。