我面临的情况是我的视图是Windows窗体,因此一旦调用其构造函数,我想创建Presenter
类的实例。我的演示者有一个构造函数,它接受两个参数,一个是视图,第二个是像这样的存储库:
Presenter(IView, IRepository)
理想情况下,我希望视图在第一个参数中传递自己,但让StructureMap注入第二个参数。 所以从我的观点来看,我想用一个参数
调用另一个Presenter类的构造函数 Presenter(IView)
并以某种方式告诉结构图解析存储库。
我不确定这是否可行?有没有人遇到这样的情况,如果是这样的话,我们如何处理它而不创建对DI框架的依赖?
由于
答案 0 :(得分:0)
听起来你最好的办法就是将你的StructureMap IContainer
的一个实例注入你的Windows窗体,然后像这样解析你的Presenter
类(其中viewParam
字符串就是这个名字您的Presenter
课程中的参数:
...
public Form(IContainer container)
{
IPresenter presenter = container.With("viewParam").EqualTo(new YourView()).GetInstance<IPresenter>();
}
...
如果您已将其配置为IRepository
参数,那么它应自动解析对{{1}}参数的依赖性。
修改强>
另一种选择是创建一个构建器类并将其注入。构建器类很像工厂类,当您创建的依赖项需要稍微超出StructureMap边界的自定义时,通常会使用它。 See this answer for an example