当前位置: 首页 > 编程语言 > C#

是否可以获取控制器中当前的Unity容器分享

时间:2023-04-10 20:33:53 C#

是否可以获取控制器中的当前Unity容器?我注册了这个统一容器:varcontainer=newUnityContainer();container.RegisterType(newContainerControlledLifetimeManager())是否可以从控制器访问这个“容器”为了方便起见,我经常这样做的一种方法是在Global.ascx.cs文件中将容器声明为全局变量,例如:publicclassMvcApplication:System.Web.HttpApplication{公共静态UnityContainer容器;protectedvoidApplication_Start(){//假设你在这里初始化}}然而,这是相当hacky。执行此操作的正确方法是使用Unity解析您的控制器(请参阅我们关于创建统一控制器工厂的文章),然后允许Unity在解析它们时将任何依赖项注入您的控制器。因此,像这样的控制器:publicMyController:Controller{publicICacheManagerCacheManager{get;set;}}将自动解析容器已注册的任何依赖项。不确定为什么需要它,但这是代码:publicActionResultArea51(){var_service=DependencyResolver.Current.GetService(typeof(IDummyService));返回视图();如果你想做的只是注入一个控制器,你应该设置DepedencyResolver在Global.asax中的应用程序启动时使用你的IoC容器。然后MVC将自动为您的控制器注入依赖项。varcontainer=newUnityContainer();DependencyResolver.SetResolver(newUnity.Mvc4.UnityDependencyResolver(容器));在此处查看更多示例:http://www.dotnet-tricks.com/Tutorial/dependencyinjection/632V140413-Dependency-Injection-in-ASP.NET-MVC-4-using-Uni??ty-IoC-Container.html我假设你是使用容器来解析一些Controller实例。如果是这种情况,您可以让控制器像任何其他控制器一样接收IUnityContainer作为依赖项。你想达到什么目的?在已解析的类中获取容器并不是很好,因为它将您的类耦合到容器,并且通常可以用其他机制替换。类程序{staticvoidMain(string[]args){varcontainer=newUnityContainer();varfoo=container.Resolve();}}publicclassMyController{privateIUnityContainer容器;publicMyController(IUnityContainercontainer){this.container=container;}}虽然可能,但最好避免它。最好通过构造函数参数获取控制器所需的任何依赖项。这样,类(控制器)就清楚地知道它需要运行的依赖项。如果配置正确,容器将提供这些依赖项及其依赖项(如果有)等。IoC容器的使用通常应限于应用程序中的一个位置(称为组合根)。对容器的任何额外引用/调用很容易导致服务定位器反模式。请参阅链接文章了解此方法可能不好的原因。以上是C#学习教程:是否可以在controller中获取当前Unity容器共享的所有内容?如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: