如果需要手动传递一个参数并且需要解析第二个参数,如何配置结构图

时间:2015-01-15 03:26:00

标签: c# dependency-injection structuremap

我面临的情况是我的视图是Windows窗体,因此一旦调用其构造函数,我想创建Presenter类的实例。我的演示者有一个构造函数,它接受两个参数,一个是视图,第二个是像这样的存储库:

Presenter(IView, IRepository)

理想情况下,我希望视图在第一个参数中传递自己,但让StructureMap注入第二个参数。 所以从我的观点来看,我想用一个参数

调用另一个Presenter类的构造函数

Presenter(IView)

并以某种方式告诉结构图解析存储库。

我不确定这是否可行?有没有人遇到这样的情况,如果是这样的话,我们如何处理它而不创建对DI框架的依赖?

由于

1 个答案:

答案 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