一个参数需要手动传递,第二个需要解析,如何配置结构图
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 边界的更多自定义时,通常会使用它。 .
我面临这样一个场景,我的视图是一个 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 边界的更多自定义时,通常会使用它。