ASP.NET MVC 3 - 内置依赖注入澄清

时间:2011-08-24 09:37:07

标签: asp.net-mvc-3 dependency-injection

我正在将ASP.NET MVC 2应用程序升级到ASP.NET MVC 3.我读过的第3版中的一个改进是依赖注入和内置服务定位器。到目前为止,我的理解是我可以删除我对控制器工厂的实现,而是实现IDependencyResolver接口。现在,我所要做的就是在Application_Start方法中更改以下内容:

var container = new UnityContainer();
...
ServiceLocator.SetLocatorProvider(() => new UnityServiceLocator(container));
ControllerBuilder.Current.SetControllerFactory(new UnityControllerFactory(container));

为:

var container = new UnityContainer();
...
DependencyResolver.SetResolver(new UnityDependencyResolver(container));

到目前为止一直很好,但我已经看到报道我还需要实现IControllerActivator。我看到的示例只是简单地展示了它如何使用依赖项解析器,因此我无法理解为什么默认实现不会自动执行此操作。如果有人可以解释这将是伟大的。我猜我需要实现这个接口来在我的控制器中获取构造函数注入。但是我如何在动作过滤器中注入一个依赖项。在我说之前:

var authorizationService = ServiceLocator.Current.GetInstance<IAuthorizationService>();

我知道我可能会将其切换为使用新的DependencyResolver,但我认为使用ASP.NET MVC 3它可以让我整理它,否则我不会看到DependencyResolver与ServiceLocator有什么不同。

如果您能帮助澄清我的一些问题,我会很感激,因为我希望在继续实施之前完全理解一些问题。

由于

1 个答案:

答案 0 :(得分:0)

您不需要实现 IControllerActivator 来支持构造函数注入 - 它可以通过使用任何“好”的IoC容器来获得,例如Ninject。

请参阅示例:图书“Part I\10 - Overview of MVC Projects\10 - Overview of MVC Projects\2. Consolidating DI'”的源代码“Pro ASP.NET MVC 3 Framework”。

毫无疑问,对我来说,它也适用于Unity。