将IUnityContainer本身作为ASP.NET MVC控制器构造函数中的参数注入是一种首选方法

 hy11011_847 发布于 2023-02-07 16:25

我在asp.net MVC 4中使用Unity.Mvc4并且内置Bootstrapper文件来注册所有类型,如下所示.

   public static class Bootstrapper
        {
            public static IUnityContainer Initialise()
            {
                var container = BuildUnityContainer();

                DependencyResolver.SetResolver(new UnityDependencyResolver(container));

                return container;
            }
    -----------------------
    ------------------------

在我的Controller构造函数中,我正在注入IUnityContainer本身以按需调用Resolve(),如下所示

 private IQuestionBusinessLogic _qstnBL;

 public MyController(IUnityContainer unityContainer)
            : base(unityContainer)

        {   

                     qstnBL = _unityContainer.Resolve();
    }

查询是

    注入IUnityContainer unityContainer本身会有任何性能负担吗?

    有没有其他方法调用Resolve()而不是以这种方式访问​​IUnityContainer unityContainer?

    打电话给Resolve()它自己有任何性能负担吗?

Wiktor Zychl.. 5

这是构建课程的一种非常糟糕的方法.您不必在服务之间建立明确的依赖关系,而是依赖于特定的IoC框架来破坏您的类.

IoC成为您班级设计中不可或缺的一部分.它不是一个"看不见的帮手",而是一流的公民.

相反,你应该让你的类依赖于你的其他类:

public MyController( IQuestionBusinessLogic questionBusinessLogic )
        : base()
{   
}

并让特定的依赖项解析器满足您的依赖项.这样您就可以从IoC依赖项中释放您的基础架构.具体来说,依赖项解析器是在应用程序的Composition Root部分中定义的(很可能是解决方案的主要项目),它是唯一将类粘合到特定IoC的类.

使用IoC框架的一个重要原则是"设计您的类和依赖关系,好像没有IoC框架.然后,只介绍一个帮助您,而不是让您依赖它".

1 个回答
  • 这是构建课程的一种非常糟糕的方法.您不必在服务之间建立明确的依赖关系,而是依赖于特定的IoC框架来破坏您的类.

    IoC成为您班级设计中不可或缺的一部分.它不是一个"看不见的帮手",而是一流的公民.

    相反,你应该让你的类依赖于你的其他类:

    public MyController( IQuestionBusinessLogic questionBusinessLogic )
            : base()
    {   
    }
    

    并让特定的依赖项解析器满足您的依赖项.这样您就可以从IoC依赖项中释放您的基础架构.具体来说,依赖项解析器是在应用程序的Composition Root部分中定义的(很可能是解决方案的主要项目),它是唯一将类粘合到特定IoC的类.

    使用IoC框架的一个重要原则是"设计您的类和依赖关系,好像没有IoC框架.然后,只介绍一个帮助您,而不是让您依赖它".

    2023-02-07 16:26 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有