zoukankan      html  css  js  c++  java
  • Asp.Net MVC Unity 依赖注入

    Unity依赖注入

       控制反转 是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection, DI), 还有一种叫"依赖查找"(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

    安装

    工具 -> 库程序包管理器 -> 程序包管理器控制台

    输入下面命令

    install-package Unity -Version 5.5.0

    install-package Unity.Mvc -Version 5.0.11

    1、添加一个接口和一个实现类

        public interface IMsg
        {
            void Display(string mes);
        }
        public class Msg : IMsg
        {
            public void Display(string mes)
            {
                Console.WriteLine("执行");
            }
        }
      public class User
      {
            public IMsg _msg;
            public User(IMsg msg)
            {
                _msg = msg;
            }
            public void Display(string mes)
            {
                _msg.Display(mes);
            }
      }

    2、新建 Bootstrapper.cs文件

        public class BootStrapper
        {
            /// <summary>
            /// 获取容器-注册依赖关系
            /// </summary>
            /// <returns></returns>
            public static IUnityContainer Initialise()
            {
                var container = BuildUnityContainer();
                DependencyResolver.SetResolver(new UnityDependencyResolver(container));
                return container;
            }
    
            /// <summary>
            /// 加载容器
            /// </summary>
            /// <returns></returns>
            private static IUnityContainer BuildUnityContainer()
            {
                var container = new UnityContainer();
                RegisterTypes(container);
                return container;
            }
    
            /// <summary>
            /// 实施依赖注入
            /// </summary>
            /// <param name="container"></param>
            private static void RegisterTypes(UnityContainer container)
            {
                //1.通过反射获取当前程序集中的所以类
                var types = Assembly.GetExecutingAssembly().GetTypes();
                foreach (var row in types)
                {
                    //2.查找出所有实现了接口的实现类 和 接口 进行配对注册依赖对象
                    var isIsInterface = row.IsInterface;
                    var interfaces = row.GetInterfaces();
                    if (!isIsInterface && interfaces.Length > 0)
                    {
                        //注册依赖对象
                        container.RegisterType(interfaces[0], row);
                    }
                }
            }
        }

    3、Global.aspx.cs添加依赖注入代码

        public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                //加载容器-注册依赖
                BootStrapper.Initialise();
            }
        }

    4、控制器UsersController.cs调用

    public class HomeController : Controller
        {
            private readonly IUser _user;
         //构造函数注入
            public HomeController(IUser user)
            {
                _user = user;
            }
    
            public ActionResult Index()
            {
                _user.Display("开箱");
                return View();
            }
        }
  • 相关阅读:
    IDEA Inspections详解
    IDEA 阿里编码规范插件
    IDEA Save Actions插件
    IDEA Lombok插件
    设计模式-简单工厂模式与工厂模式
    DAO设计模式
    Jcrop+strut2+jsp实现图片剪切
    Spring的Bean的作用域
    Spring的事务机制
    windows 下 Redis 主从 读写分离
  • 原文地址:https://www.cnblogs.com/wuweimin/p/8118802.html
Copyright © 2011-2022 走看看