zoukankan      html  css  js  c++  java
  • 在 mvc 4 中使用 unity 进行依赖注入

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

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

     源码下载: 下载源码

  • 相关阅读:
    「JavaSE 重新出发」05.03.02 在运行时使用反射分析对象
    「JavaSE 重新出发」05.03.01 利用反射分析类
    「JavaSE 重新出发」05.03 反射
    「JavaSE 重新出发」05.02 泛型数组列表、包装类
    scp 命令简明介绍
    《鸟哥的Linux私房菜》笔记——04. 简单命令行
    《鸟哥的Linux私房菜》笔记——03. 磁盘分区
    「JavaSE 重新出发」05.01.02 hashCode 方法、toString 方法
    「JavaSE 重新出发」05.01.01 equals 方法
    「JavaSE 重新出发」05.01 继承
  • 原文地址:https://www.cnblogs.com/wisdo/p/4178136.html
Copyright © 2011-2022 走看看