我在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框架.然后,只介绍一个帮助您,而不是让您依赖它".
这是构建课程的一种非常糟糕的方法.您不必在服务之间建立明确的依赖关系,而是依赖于特定的IoC框架来破坏您的类.
IoC成为您班级设计中不可或缺的一部分.它不是一个"看不见的帮手",而是一流的公民.
相反,你应该让你的类依赖于你的其他类:
public MyController( IQuestionBusinessLogic questionBusinessLogic ) : base() { }
并让特定的依赖项解析器满足您的依赖项.这样您就可以从IoC依赖项中释放您的基础架构.具体来说,依赖项解析器是在应用程序的Composition Root部分中定义的(很可能是解决方案的主要项目),它是唯一将类粘合到特定IoC的类.
使用IoC框架的一个重要原则是"设计您的类和依赖关系,好像没有IoC框架.然后,只介绍一个帮助您,而不是让您依赖它".