在 mvc 4 中使用 unity 进行依赖注入
关于依赖注入的概念,这里就不再叙述了,我们用 mvc 4 结合 unity,使用构造函数来进行依 赖注入。具体步骤如下: 1. 首先建立 一个 mvc 项目, 选择 basic
创建好后,完整的项目应该是这样的:
2. 创建 Home控制器, 并添加 index 视图
3.创建 UserInfo 类, 和 Iuser 接口以及 UserService类,UserService 实现Iuser 接口中 的方法, 其中的业务逻辑自己可以根据具体的情况来实现
4.打开 Nuget 程序管理包, 在搜索框中输入 unity ,并下载安装,具体如下图:
5. 创建一个 依赖解析容器,并实现接口IDependencyResolver 中两个重要的方法 object GetService(Type serviceType) IEnumerable<object> GetServices(Type serviceType) 这两个方法就是返回所依赖的服务的对象
/// <summary> /// Dependency Injection Resolver Container /// </summary> public class UnityResolver : IDependencyResolver { protected IUnityContainer container; public UnityResolver(IUnityContainer container) { if (container == null) { throw new ArgumentNullException("container"); } this.container = container; } public object GetService(Type serviceType) { try { return container.Resolve(serviceType); } catch (ResolutionFailedException) { return null; } } public IEnumerable<object> GetServices(Type serviceType) { try { return container.ResolveAll(serviceType); } catch (ResolutionFailedException) { return new List<object>(); } } }
6. 在 app_start 中添加一个 unityConfig 配置文件
在这个文件中声明一个静态的没有返回值的方法,RegisterComponents,实例化一个解析容器 (也是刚才所添加的解析容器),然后将所依赖的接口和实现类在这里进行注册。 container.RegisterType<IUserInfo, UserInfoService>( new HierarchicalLifetimeManager()); 最后调用 DependencyResolver对象的 SetResolver方法 来保存刚才的注册。
public static void RegisterComponents() { var container = new UnityContainer(); // register all your components with the container here // it is NOT necessary to register your controllers // e.g. container.RegisterType<ITestService, TestService>(); container.RegisterType<IUserInfo, UserInfoService>( new HierarchicalLifetimeManager()); DependencyResolver.SetResolver(new UnityResolver(container)); }
7. 在 global.cs 中注册 UnityConfig 配置文件
UnityConfig.RegisterComponents();
8. 在Home 控制器中使用构造函数注入
IUserInfo userinfoService; public HomeController( IUserInfo userinfoService) { // 依赖注入 this.userinfoService = userinfoService; }
重新生成一下项目,如果没有错误,启动运行,我们将会看到样的界面:
源码下载: 下载源码