【问题标题】:SearchDomainFactory.Instance is obsolete: 'Inject me!' ( Can't find out how to create instance)SearchDomainFactory.Instance 已过时:“注入我!” (不知道如何创建实例)
【发布时间】:2015-03-07 09:57:03
【问题描述】:

我正在尝试将 R# 扩展项目从 R# 6 迁移到 R# 8。(我接手了某人编写的项目,而且我是编写扩展的新手。)

在现有的 v6 项目中,有一个派生自 RenameWorkflow 的类,构造函数曾经看起来像这样;

public class RenameStepWorkflow : RenameWorkflow
{
    public RenameStepWorkflow(ISolution Solution, string ActionId) 
        : base(Solution, ActionId)
    {
    }

这曾经在 R# SDK v 6 中工作,但现在在 V8 中,RenameWorkflow 不再具有采用 Solution 和 actionId 的构造函数。新的构造函数签名现在看起来像这样;

    public RenameWorkflow(
IShellLocks locks, 
SearchDomainFactory searchDomainFactory, 
RenameRefactoringService renameRefactoringService, 
ISolution solution, 
string actionId);

现在这是我需要帮助的问题(我认为)

我已经复制了构造函数,现在这个类的构造函数必须满足这些新的依赖关系。通过一些挖掘,我设法找到了满足所有依赖项的方法,除了 'SearchDomainFactory'。我可以通过更新的构造函数来实例化的最接近如下;

新的 RenameStepWorkflow(Solution.Locks, JetBrains.ReSharper.Psi.Search.SearchDomainFactory.Instance, RenameRefactoringService.Instance, this.Solution, null)

一切看起来都不错,除了 JetBrains.ReSharper.Psi.Search.SearchDomainFactory.Instance 被标记为过时,并且给了我一个无法解决的编译错误,即使使用 #pragma 也不允许我编译代码。我编译时得到的确切错误消息是Error 16 'JetBrains.ReSharper.Psi.Search.SearchDomainFactory.Instance' is obsolete: 'Inject me!'

很明显的下一个问题..好的,怎么样?我如何“注入你”?我找不到关于这个新的重大更改的任何文档,事实上,我找不到任何文档(或示例项目)甚至提到 DrivenRefactoringWorkflowRenameWorkflow,(现在需要新 SearchDomainFactory 的类),或任何关于SearchDomainFactory.Instance 现在突然过时了,如何满足“注入”它的需要。

任何帮助将不胜感激!谢谢你,

问候

艾伦

【问题讨论】:

    标签: resharper resharper-plugins resharper-sdk


    【解决方案1】:

    ReSharper 有自己的 IoC 容器,它负责创建类的实例,并将依赖项“注入”作为构造函数参数。标有[ShellComponent][SolutionComponent] 等属性的类由容器处理,分别在应用程序启动或加载解决方案时创建。

    依赖项应该作为构造函数参数注入,而不是使用像GetComponent<TDependency>或静态Instance属性这样的方法,因为这允许容器控制依赖项的生命周期,并确保您依赖于适当的组件,而不是造成泄漏- 例如,shell 组件不能依赖于解决方案组件,在创建 shell 组件时它不会存在。

    ReSharper 在几个版本前引入了 IoC 容器,并且大部分代码库已更新以正确使用它,但仍有一些保留,其中的事情仍然以不太理想的方式完成 - 静态Instance 属性和对GetComponent 的调用。这是你遇到的。您应该能够通过将 SearchDomainFactory 的实例作为构造函数参数放入组件中来获取它。

    您可以在开发指南中找到有关组件模型(IoC 容器和相关功能)的更多信息:https://www.jetbrains.com/resharper/devguide/Platform/ComponentModel.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 2019-11-01
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多