MVC4 基于 Unity Ioc 框架的 ControllerFactory
首先引入Untiy框架。 可以在NuGet程序包 管理器中直接安装。
新建 继承DefaultControllerFactory 的UnityControllerFactory:
重写虚方法GetControllerInstance。
public class UnityControllerFactory : DefaultControllerFactory { public IUnityContainer UnityContainer { get; private set; } public UnityControllerFactory(IUnityContainer unityContainer) { this.UnityContainer = unityContainer; } protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) { if (null == controllerType) { return null; } return (IController)this.UnityContainer.Resolve(controllerType); } }
然后再Global.asax中进行Unity的激活:
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); //如下 UnityContainer unityContainer = new UnityContainer(); //IEmployeeRepository 就是需要进行依赖的 仓储层 unityContainer.RegisterType<IEmployeeRepository, EmployeeRepository>(); UnityControllerFactory controllerFactory = new UnityControllerFactory(unityContainer); ControllerBuilder.Current.SetControllerFactory(controllerFactory); }
接下来我们在Controller中需要拟定 依赖属性 的注入方式
Dependency特性 就是告诉我们这个 依赖属性
[Dependency] public IEmployeeRepository Repository { get; set; }
还有 是基于 Ninject Ioc 框架 通过 IControllerActivator 或 IDependencyResolver 的激活方式。
...