我需要获取对容器的引用
不,你没有。您永远不需要DependencyResolver
在应用程序中引用容器(或)。
改用构造函数注入:
public class HomeController : Controller
{
private readonly ITestService testService;
// constructor
public HomeController(ITestService testService)
{
this.testService = testService;
}
public ActionResult Index()
{
return View(this.testService);
}
}
由于您使用 MVC3 集成包进行统一,因此您可能DependencyResolver
在应用程序的启动路径中注册了特定于 Unity 的内容。看起来很像这样:
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
完成此操作后,您的自定义DependencyResolver
会将控制器的创建委托给 Unity 容器,并且 Unity 容器能够注入控制器构造函数的依赖关系。
下一件你永远不应该做的事情是让视图做任何工作并使它们依赖于你的服务。视图应该是愚蠢的,除了映射它们从控制器获得的数据并将它们转换为 HTML(或 JSON 或其他)之外什么也不做。
换句话说,不要传递testService
给视图。在视图中调用testService
from 会隐藏该逻辑,使视图更加复杂,并使系统难以测试。由于您使用的是ITestService
抽象,我假设您希望能够测试您的代码,但测试视图并不容易(或者至少不像测试控制器那么容易)。
您应该做的是让控制器调用testService
并收集视图使用所需的数据。然后将该数据(可能组合在一个类中,一个视图模型中)传递给视图。