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

How to configure structure map if one parameter needs to be manually passed and the second needs to be resolved

我面临这样一个场景,我的视图是一个 Windows 表单,所以一旦它的构造函数被调用,我想创建一个 Presenter class 的实例。我的演示者有一个带有两个参数的构造函数,一个是视图,第二个是存储库,如下所示:

Presenter(IView, IRepository)

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

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

Presenter(IView)

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

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

谢谢

听起来你最好的选择是将 StructureMap IContainer 的一个实例注入到你的 Windows 表单中,然后像这样解析你的 Presenter class (其中viewParam 字符串是 Presenter class 上的参数名称):

...
    public Form(IContainer container)
    {
        IPresenter presenter = container.With("viewParam").EqualTo(new YourView()).GetInstance<IPresenter>();
    }
...

StructureMap 应该会自动解析对 IRepository 参数的依赖关系(如果您已对其进行配置)。

编辑

另一种选择是创建构建器 class 并将其注入。构建器 class 与工厂 class 非常相似,当您创建的依赖项需要超出 StructureMap 边界的更多自定义时,通常会使用它。 .