Dependency injection 如何使用StructureMap将默认构造函数参数设置为null?

Dependency injection 如何使用StructureMap将默认构造函数参数设置为null?,dependency-injection,constructor,inversion-of-control,structuremap,Dependency Injection,Constructor,Inversion Of Control,Structuremap,类有一个唯一的构造函数,该构造函数将IMyInterface作为其参数。如果我定义了IMyInterface的一个具体类型并将其注册到StructureMap,那么就没有问题了,我的类可以用这个具体类型实例化 但是,在某些情况下,不会注册任何具体类型。在这种情况下,我希望IMyInterface参数接收null。相反,我得到了一个例外: StructureMap异常代码:202 没有为PluginFamily IMyInterface定义默认实例 是否可以为缺少的插件定义默认值 上下文:我的类是

类有一个唯一的构造函数,该构造函数将IMyInterface作为其参数。如果我定义了IMyInterface的一个具体类型并将其注册到StructureMap,那么就没有问题了,我的类可以用这个具体类型实例化

但是,在某些情况下,不会注册任何具体类型。在这种情况下,我希望IMyInterface参数接收null。相反,我得到了一个例外:

StructureMap异常代码:202 没有为PluginFamily IMyInterface定义默认实例

是否可以为缺少的插件定义默认值

上下文:我的类是一个服务,它使用Spark视图引擎并定义一些默认名称空间。该服务使用ISparkNamespacesProvider(IMyInterface)添加传统名称空间。客户端应用程序可以注册或不注册这样的提供商。这就是为什么服务的构造函数将接收提供者或无提供者。

取自:


但我不建议这样做。

StructureMap现在通过UseIfNone支持这种情况,必须将null强制转换为IMyInterface以避免不明确的调用。不幸的是,它不起作用。当我定义一个具体类型并将其注册到SM时,仍然传递null。因此,您的代码似乎没有定义默认参数,而是为该参数定义一个强制值。如果我删除您的代码,将使用具体类型。@Nicolas在配置中应该只指定一个具体实现。否则-你的设计很可能是错误的。@Nicolas也许你可以在这里发布使用
IMyInterface
的类?构造函数和使用
IMyInterface
@Nicolas的部分为什么会出现具体实现未知的情况?我不会动态地在null或具体类型之间切换。在初始化时,我要么定义一个具体类型,要么不定义(换句话说,客户端应用程序a将定义一个,客户端应用程序B将不定义)。
For<IService>().Use<MyService>()
 .Ctor<IMyInterface>("nameOfParameter").Is(null);
public MyClass():this(null){...}