【发布时间】:2020-01-31 20:37:23
【问题描述】:
我有一个 C# 和 ASP.NET MVC 项目,使用带有 Ninject 的 Repository 模式。
当前控制器拥有我的数据存储库的所有注入,我想我必须远离System.Web 程序集,因为数据存储库应该只知道数据库而不知道其他任何信息。
查看我的代码后,我发现我依赖于AppStateProvider:
public class AppStateProvider : IAppStateProvider
{
public Profile AppState
{
get
{
Profile appState = null;
if (HttpContext.Current != null && HttpContext.Current.Session["appstate"] != null)
{
appState = (Profile )HttpContext.Current.Session["appstate"];
}
return appState;
}
}
}
这个依赖注册在我的NinjectWebCommon.cs:
kernel.Bind(typeof(IAppStateProvider)).To(typeof(Helpers.AppStateProvider));
具体类 AppStateProvider 位于我的 Web 项目中的 Helpers 文件夹中。
现在,在我的数据项目中,我有以下注入依赖项的存储库。
public class EmployeeRepository : IEmployeeRepository
{
ILogManager _logManager = null;
private readonly Profile _appState;
public EmployeeRepository (IAppStateProvider appStateProvider, ILogManager logManager)
{
_appState = appStateProvider.AppState;
_logManager = logManager;
}
// some methods here!!
}
所以,我想我的做法是正确的,因为 Data Repository 仍然对应用程序上下文 (HttpContext) 一无所知,如果我从 Windows 服务项目中引用相同的 Data Repository,那么我的具体将被注入而不是调用HttpContext 来获取会话的类可能会调用数据库或其他地方来获取Profile 对象属性。我说的对吗?
有没有一种方法可以将依赖项从我的控制器传递给 Profile 对象而不是将其作为参数传递给每个方法,而不是将其作为属性对象传递?
【问题讨论】:
标签: c# asp.net-mvc dependency-injection ninject repository-pattern