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

 

 

 

三.常见问题:

posted @   土豆哥  阅读(294)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示