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

时间:2013-04-10 10:01:45

标签: c# dependency-injection 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,我认为它会完成任务。

1 个答案:

答案 0 :(得分:4)

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

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