Tes*_*rex 6 c# factory dependency-injection
我最近问过正确地做DI,并获得了一些关于它的博客文章的链接.我想我现在有了更好的理解 - 通过将它放在工厂中,将逻辑分离出来.但是所有的例子都是针对像网站这样的东西,并且说要在启动时做所有的接线.调用一个大工厂,它可以new
传递所有依赖关系.
但是,如果我不想在前面实例化所有内容呢?我有一个对象,其中包含可以委派给的其他对象的列表,但它们很昂贵,并且一次只使用一个,所以我在需要时构建它们,并在完成后让它们被收集.我不想把它new B()
放在逻辑中A
因为我宁愿使用DI - 但是如何?可以A
打电话给工厂吗?除非工厂维持包括当前依赖关系的状态,否则这似乎并没有好多少.我只是不想将B
s 的完整列表传递到A
构造时,因为它会浪费.如果你愿意,B
不一定必须在里面A
,虽然它具有逻辑意义(A
是一个游戏级别,B
是一个单一的屏幕),但无论如何,逻辑A
决定何时B
创建.
那么,谁叫工厂得到B
,什么时候?
澄清:我没有使用DI的框架.我想知道DI一词是否意味着?
在Ninject中,您可以Func<B>
在构造函数中注册并请求A
.
Func<B>
如果B
已经注册,Autofac将自动供应.
或者,您可以采用更直接的方法并为其定义显式工厂B
,并在构造函数中请求该工厂; 它只是更多的打字,因为你必须为你想懒洋洋地初始化的每个依赖创建一个工厂.
这是另一个显示Ninject样式工厂方法的SO答案:如何使用Ninject处理带静态方法的类?
@Not使用框架:如果可以的话,我可能会考虑使用一个框架:IoC/DI框架通常会为您提供开箱即用的延迟创建.
如果你想继续自己动手,那么只需将创建B的工厂传递给你的A对象.或者,如果您不喜欢原始Func并且不想为所有对象创建显式工厂,那么您可以考虑使用Lazy<B>
更正式的解决方案.
归档时间: |
|
查看次数: |
137 次 |
最近记录: |