sun*_*ide 7 c# java language-agnostic design-patterns dependency-injection
我最近了解了DI框架Guice和Ninject,并希望在我的一些新项目中使用它们.
虽然我熟悉一般依赖注入概念并且知道如何使用这些框架来构建对象图,但在动态应用程序行为方面,我很难应用IoC .
考虑这个例子:
虽然很容易将主窗口的View连接到Presenter/ViewModel,然后将其绑定到域逻辑,但我不明白如何干净地(在IoC意义上)实现以下任务:
IGreenBoxView,IRedImageView< - JConcreteGreenBoxView,JConcreteRedImageView),而不使用任何类型的服务定位器模式(例如,再次从IoC请求)
JOptionPane在运行时实例化一个新的具体对话框我已经看到一些使用抽象工厂的解决方案,但老实说并没有完全理解它们.似乎这样的解决方案会导致一些(查看域名,presenter域名,......)内部类型暴露给构造根,并随之暴露给整个世界.
那么 - 我该怎么做呢?
如果您可以重用这些控件,那么您可以在使用它们的地方进行构造函数注入。否则你必须注入一个工厂:
public interface IControlFactory
{
IGreenBoxView CreateGreenBoxView();
IRedImageView CreateRedImageView();
}
Run Code Online (Sandbox Code Playgroud)
并将其注入到需要创建此控件的位置。
实现进入容器配置。在那里您可以将容器注入到实现中。一些容器提供自动实现该工厂的功能。例如,在 Ninject 中:
Bind<IControlFactory>().ToFactory();
Run Code Online (Sandbox Code Playgroud)
请参阅https://github.com/ninject/ninject.extensions.factory/wiki
| 归档时间: |
|
| 查看次数: |
793 次 |
| 最近记录: |