1

给定以下 StructureMap 注册表

For<ILogger>().Use(LogFactory.CreateLogger());
For<Scheduler>().Use(() => new Scheduler(ObjectFactory.GetInstance<ILogger>()));

...这是提供一个的方法吗?它有效- 但我很想知道它是否是提供容器配置提供的类型的糟糕方式,或者它是否是我在场景中的唯一选择......场景是类型本身具有其他构造函数我不能改变,也不关心——但它们是必需的,所以我需要指定这个特定的构造函数而不是使用直接的构造函数ILoggerSchedulerSchedulerFor<x>().Use<y>();

4

1 回答 1

1

注册服务最好只有一个公共构造函数。这使得服务产生的依赖关系变得明确,并且非常清楚容器将选择哪个构造函数,并且它允许您使用更灵活的 注册类型Use<T>(),并使得组合根在构造函数更改时不太可能更改。

但是,正如您所说,在您的情况下,您无法更改该类型的构造函数,因此您将不得不退回。有多种方法可以使用 StructureMap 选择正确的构造函数,但注册委托是最好的方法,因为这为您提供了编译时支持。

于 2012-06-28T12:03:15.267 回答