我有以下界面
interface IProfileRepo {
}
它的实施
public class DBProfileRepo : IProfileRepo {
string _specialValue;
public DBProfileRepo(IAuthorizedController authController) {
_specialValue = authController.SomeValue;
}
}
我的绑定是
Bind<IProfileRepo>()
.To<DBProfileRepo>()
.InRequestScope();
实现IAuthorizedController的我的MVC控制器正在接收这个DBProfileRepo注入,但是,DBProfileRepo需要此控制器作为构造函数参数。我怎样才能做到这一点?
我正在使用Ninject 2.2.1.0
答案 0 :(得分:4)
您的对象之间存在循环依赖关系,这是您在设计对象层次结构时应该避免的。存储库不应该需要一个控制器实例,这根本没有意义。存储库是一种数据访问类,可以在不存在控制器的桌面或Silverlight等不同类型的应用程序中重用。它是控制器,应该需要一个存储库,而且几乎都是。
如果您需要将一些信息传递给仅在控制器中可用的存储库(例如请求参数),只需设计一个对象并将此对象从控制器传递给存储库方法,但不要传递整个控制器。