如何告诉Ninject为嵌套构造函数注入相同的实例?

我有一个Windows服务应用程序,我想在我的服务类中使用Ninject。 有一些服务类使用其他服务类,比如说“低级”或更通用的服务类。 每个服务通常都需要一个数据库访问存储库。

例如,我有一个IRepository接口,一个IServices1和一个IServices2接口。 后两者有Services1和Services2实现,两者都有一个IRepository类型的构造函数参数。 现在假设Services1的实现想要使用IServices2接口的一些方法,所以我将另一个构造函数参数添加到Services1,类型为IServices2。 现在,当我手动实例化Services1类时,我会这样做:

var repo = new MyRepository(); // implementing IRepository var service1 = new Services1(repo, new Services2(repo)); 

这样我就可以确保两个服务都可以使用相同的存储库(这对我来说是一个基本要求)。

如何使用Ninject为此scneario为我准备一个IServices1实例并使用正确的IRepository注入? 或者这种方法有任何重大设计错误吗?

我不是在MVC平台上,所以我没有这里的请求范围,我认为如果它是MVC我会做任务。

看看NamedScope扩展。 这种情况有一些例子。

https://github.com/ninject/ninject.extensions.namedscope/wiki