我正在考虑为IoC容器返回的应用程序的一部分定义一个Facade,在我的例子中是StructureMap。 Facade有一个没有参数的构造函数来设置默认实现,另一个是我可以定义Facade管理的不同子系统对象的自定义实现。
但是,由于StructureMap正在尝试使用大多数参数调用构造函数的Facade实例,因此如果没有注册其他子系统的实现,它将失败。
我的问题是:有没有办法让StructureMap尝试使用以下构造函数,如果它不能使用主构造函数?或者我必须告诉StructureMap选择哪个构造函数?
答案 0 :(得分:1)
据我所知,如果没有成功解决贪婪问题,就不可能让StructureMap尝试解析一个实例并回到替代ctors。
我认为使用StructureMap连接Facade的依赖关系并在那里指定默认值是个好主意。也许可以使用Null对象实现作为可能缺失的子系统的默认值。
答案 1 :(得分:1)
您可以指定将创建类型的委托,如下所示:
container.Configure(r => r.For<IFacade>().Use(() => new RealFacade()));