在 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;
      }

 

 重新生成一下项目,如果没有错误,启动运行,我们将会看到样的界面:

 源码下载: 下载源码

posted on 2014-12-22 14:27  wisdo  阅读(831)  评论(0编辑  收藏  举报