码迷,mamicode.com
首页 > 编程语言 > 详细

在 mvc 4 中使用 unity 进行依赖注入

时间:2014-12-22 15:42:41      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

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

 

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

技术分享

 源码下载: 下载源码

在 mvc 4 中使用 unity 进行依赖注入

标签:

原文地址:http://www.cnblogs.com/wisdo/p/4178136.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!