Unity如何解决静态类中的依赖?我有以下扩展方法,它(自然地)存在于静态类中。publicstaticclassMyExtensions{[Dependency]privatestaticIMyDataContext_myDataContext{get;放;}publicstaticvoidMyExtensionMethod(thisMyTypemyType){//做一些事情_myDataContext.DoAwesomeThing();}}_myDataContext对象为空。通常我会使用UnityContainer来注册类型,但由于这是一个静态类,所以我不能。我需要什么来实例化_myDataContext,以便在需要时它不为空?正如您已经提到的,Unity不能用于解析类,因为它是静态的。有几种选择。我个人最喜欢的是使用抽象工厂模式。我倾向于调整模式只是为了与DI一起工作。工厂通常看起来像这样://////创建一个IMyDataContext实例///publicstaticclassMyDataContextFactory{//////用于创建实例的工厂///staticFuncfactory;//////初始化指定的创建工厂。//////创建工厂。publicstaticvoidSetFactory(FunccreationFactory){factory=creationFactory;}//////创建一个新的IMyDataContext实例。//////返回IMyDataContext的实例publicstaticIMyDataContextCreateContext(){if(factory==null)thrownewInvalidOperationException("如果不先构建工厂,则无法创建上下文。");返回工厂();在引导过程中(每当您设置服务注册时),您可以初始化一个工厂来解决依赖关系。MyDataContextFactory.SetFactory(()=>this.Container.Resolve());现在,在您的扩展方法中,您将获得上下文。publicstaticclassMyExtensions{publicstaticvoidMyExtensionMethod(thisMyTypemyType){MyDataContextFactory.CreateContext().DoAwesomeThing();您对上下文的Unity注册可以处理服务的各种不同配置(如果有条件解决它)。如果上下文可以由Unity以外的其他东西设置,则此所有者只能传入扩展方法将使用的新委托。我倾向于避免将容器本身传递到我的工厂中,因为这开始将容器与我的应用程序紧密耦合。如果我要向工厂发送任何东西,我宁愿它是一个工厂委托来通过DI解决,而不是通过DI容器本身。以上就是C#学习教程:如何使用Unity解决静态类中的依赖?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
