我们使用Ninject作为IOC。Ninject和私人构造函数
我们所有的Repository对象都可以(也应该)被模拟进行单元测试。我希望强制所有开发人员在与存储库交互时只编写接口。对于这一点,我想使构造私人,营造建设静态访问工厂方法:
public class SomeRepository : ISomeRepository
{
private SomeRepository()
{
}
public static ISomeRepository Create()
{
return StandardKernel.Get<ISomeRepository>();
}
}
问题就在于此:我怎么有Ninject创建实际的对象?我在同一个项目中拥有版本库接口和类
[必填服务定位器链接。](http://blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx)在继续您的设计之前,我会阅读这两次 - 'StandardKernel.Get'看起来像一个服务定位器。我不会说“服务定位器在这里肯定是错误的”,但Mark Seemann会,而且如果我是你,我会相信他。 –
为什么你想强制私人构造函数?没有冒犯,但我认为你应该相信你的开发人员,并简单地定义某些书面或口头传达,而不是过分复杂的事情与一个尴尬的设计... –
@ default.kramer:完全同意文章,这就是为什么我不想陷入同样的陷阱。通过没有其他方式创建对象,我计划强制维护开发人员使用IOC而不是方向实例化 – Igorek