给出以下的StructureMap注册表
For<ILogger>().Use(LogFactory.CreateLogger());
For<Scheduler>().Use(() => new Scheduler(ObjectFactory.GetInstance<ILogger>()));
...这是向ILogger
提供Scheduler
的良好方式吗?它工作 - 但我很想知道提供容器配置提供的类型是否是一种糟糕的方式,或者它是否是我给出方案的唯一选择...场景是Scheduler
类型本身有其他构造函数,我无法更改,也不关心 - 但它们是必需的,所以我需要指定这个特定的构造函数而不是使用直接For<x>().Use<y>();
答案 0 :(得分:1)
如果注册的服务只有一个公共构造函数,那将是最好的。这使得服务的依赖关系明确无误,并且非常清楚容器将选择哪个构造函数,并且它允许您使用更灵活的Use<T>()
注册类型,并使组合根更不可能被更改当构造函数改变时。
但是,正如您所说,在您的情况下,您无法更改该类型的构造函数,因此您将不得不退回。有多种方法可以使用StructureMap选择合适的构造函数,但注册委托是最好的方法,因为这可以为您提供编译时支持。