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();
            }
        }
  • 相关阅读:
    如何将网格式报表打印成其它样式
    拥有与实力不相称的脾气是种灾难——北漂18年(23)
    8.8.1 Optimizing Queries with EXPLAIN
    mysql 没有rowid 怎么实现根据rowid回表呢?
    secondary index
    8.5.5 Bulk Data Loading for InnoDB Tables 批量数据加载
    mysql 中key 指的是索引
    8.5.4 Optimizing InnoDB Redo Logging 优化InnoDB Redo 日志
    8.5.3 Optimizing InnoDB Read-Only Transactions 优化InnoDB 只读事务
    8.5.1 Optimizing Storage Layout for InnoDB Tables InnoDB表的存储布局优化
  • 原文地址:https://www.cnblogs.com/wuweimin/p/8118802.html
Copyright © 2011-2022 走看看