使用StructureMap进行服务时,构造函数中存在可为空的参数时,我会遇到一些困难。 IE。

public JustGivingService(IRestClient restClient = null)

在我的配置中,与所有其他服务一起,我的通常可以摆脱的限制,因此这里的问题可能只是缺乏理解。我会这样做:
container.For<IJustGivingService>().Use<JustGivingService>()

但是,由于参数为nullable,因此我将需要使用它来使其工作:
RestClient restClient = null;
container.For<IJustGivingService>().Use<JustGivingService>()
    .Ctor<IRestClient>("restClient").Is(restClient);

但是,这对我来说确实有点脏,我觉得这可能是我要实现的目标的一种解决方法,而不是标准的实现方法。如果有更好的方法可以解决此问题,那么有关原因的随附信息将不胜感激。

最佳答案

StructureMap不支持可选的构造函数参数,因此不应该。如this blog post中所述:



因此,解决方案是为IRestClient创建Null Object实现,并将该实现注册到StructureMap中。

例子:

// Null Object pattern
public sealed class EmptyRestClient : IRestClient {
    // Implement IRestClient methods to do nothing.
}

// Register in StructureMap
container.For<IRestClient>().Use(new EmptyRestClient());

09-26 08:13