• DI 依赖注入之unity(mvc)


    DI 依赖注入之unity(使用unity.mvc)

    一.nuget下载安装:

    使用Nuget安装Unity.MVC

    安装完成后会在~/App_Start/目录下自动生成UnityMvcActivator.cs和UnityConfig.cs文件

    二.配置:

    打开UnityConfig文件,修改RegisterTypes()方法的代码

     public static void RegisterTypes(IUnityContainer container)
            {
                // NOTE: To load from web.config uncomment the line below.
                // Make sure to add a Unity.Configuration to the using statements.
                // container.LoadConfiguration();
    
                // TODO: Register your type's mappings here.
                // container.RegisterType<IProductRepository, ProductRepository>();
    
                //增加自己需要注入的接口和接口的实现类
                container.RegisterType<IUserDAL, UserDAL>();
                container.RegisterType<IUserBLL, UserBLL>();
            }

    二.使用:【注意对比之间的区别及实现方式,会比较容易学习】

    1.代码方式注入

    (1)构造函数注入(推荐):

    public class UserController : Controller
        {
            public UserController(IUserBLL userBLL)
            {
                this.userBLL = userBLL;
            }
    
            IUserBLL userBLL;
            // GET: User
            public ActionResult Index()
            {
                var list = userBLL.GetUserModels();
                return View(list);
            }
        }

     无参数构造函数:切记增加特性:InjectionConstructor

    (2)属性注入:

    namespace ZLP.Web.Controllers
    {
        public class UserController : Controller
        {
            [Dependency]
           public IUserBLL userBLL { get; set; }
            // GET: User
            public ActionResult Index()
            {
                var list = userBLL.GetUserModels();
                return View(list);
            }
        }
    }

    错误:System.NullReferenceException:“未将对象引用设置到对象的实例。”

    解决方法:

    1.给要注入的属性增加Dependency特性,切记

    2.引用是否是using Unity命名空间下的,别选错了(using System.Runtime.CompilerServices;)

    3.属性的访问修饰符是否用public

    (3)方法注入:

     IUserBLL userBLL;
    
            [InjectionMethod]
            public void instance(IUserBLL userBLL)
            {
                this.userBLL = userBLL;
            }

    2.配置文件注入(推荐)

     打开UnityConfig文件,修改RegisterTypes()方法的代码

     public static void RegisterTypes(IUnityContainer container)
            {
                // NOTE: To load from web.config uncomment the line below.
                // Make sure to add a Unity.Configuration to the using statements.
                // container.LoadConfiguration();
    
                // TODO: Register your type's mappings here.
                // container.RegisterType<IProductRepository, ProductRepository>();
    
                //增加自己需要注入的接口和接口的实现类
                //container.RegisterType<IUserDAL, UserDAL>();
                //container.RegisterType<IUserBLL, UserBLL>();
    
                //加载配置文件
                container.LoadConfiguration();
                //var section = (UnityConfigurationSection)ConfigurationManager.GetSection(UnityConfigurationSection.SectionName);
                //container.LoadConfiguration(section);
            }

    配置文件配置:web.config

    三.常见问题:

  • 相关阅读:
    The Problem of Programming Language Concurrency Semantics
    AMD64 Architecture Programmer’s Manual Volume 1: Application Programming
    Intel® 64 Architecture Memory Ordering White Paper
    Systems Benchmarking Crimes
    A Guide to Undefined Behavior in C and C++, Part 1
    39张IoT传感器工作原理GIF动图汇总
    全真互联
    从Context到go设计理念
    中国汽车基础软件发展白皮书3.0
    设备影子
  • 原文地址:https://www.cnblogs.com/zlp520/p/12019360.html
Copyright © 2020-2023  润新知