【发布时间】:2015-02-07 13:55:00
【问题描述】:
我已经掌握了依赖注入的基础知识,但我正在努力尝试在使用 Unity 的 MVC API C# 应用程序中将其正确组合在一起。我遇到的问题是我将拥有一个具有方法的控制器,并且在该方法中它会说两个对象。其中一个对象将依赖于数据访问层,而另一个则没有。我不太确定如何设置。
假设我有一个控制器,它使用以下方法从搜索对象中获取用户。它还使用 SearchParameters 对象来执行搜索。如果您不使用名称进行搜索,您将获得所有结果,或者如果您输入名称,您将获得任何具有该名称的用户。
public Users[] GetUsers(string name) {
Company.SearchParameters searchParams = new Company.SearchParameters(name);
Company.UserSearchService searchService = new Company.UserSearchService(searchParams);
return searchService.Search();
}
这当然是一个超级简化的版本,但在这种情况下,Search 方法中的 UserSearchService 正在执行显式数据库调用。所以我知道这是我必须给予它的依赖。 SearchParameters 实际上只是一个保存数据的类。
这是我不确定下一步该做什么的地方。控制器本身没有依赖关系,但由于 UserSearchService 没有,我不确定如何使用统一我正确设置它并考虑构造函数的运行时值。我也不确定 SearchParameters 是否应该被视为依赖项。
此外,如果重要的话,SearchParameters 和 UserSearchService 没有任何类型的支持接口,并且此控制器上还有其他方法可以与其他类交互,这些类对数据访问层依赖项有类似需求,例如可能是 Company.UserAccount。
【问题讨论】:
-
根据您的代码,
Company.UserSearchService除了Company.SearchParameters之外没有依赖项(或者您省略了什么?)但是您说 Controller 本身没有依赖项,但由于 UserSearchService 有 -
在 UserSearchService 的 Search 方法中,它有一个对 Database.Execute 的显式调用,这是一个命中数据库的静态方法,因此这是当前依赖项所在的位置。我想解决这个问题,所以它实际上是可测试的。
标签: c# asp.net-mvc dependency-injection dependencies unity-container