Resharper(或Visual Studio)快捷方式,用于级联对构造函数的更改

cbp*_*cbp 6 resharper

这是一个常见的重构,我不相信我已经看到了一个捷径:

想象一下,我们有一个带有许多继承子类的基类.基类使用构造函数注入来接受许多服务:

class FooBase
{
    private IMyService _myService;
    private IMyOtherService _myOtherService;

    public FooBase(IMyService myService, IMyOtherService _myOtherService)
    {
         _myService = myService;
         _myOtherService = myOtherService;
    }
}

class FooConcrete : FooBase
{
    public FooConcrete(IMyService myService, IMyOtherService _myOtherService)
        base(myService, myOtherService)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

注意FooConcrete如何调用其基类FooBase的构造函数.

现在,如果我想向FooBase添加另一项服务会怎样?我可以从FooBase的构造函数快速初始化新的私有字段.但我仍然需要四处手动更新从FooBase继承的每个子类.如果有很多继承类,这可能会很麻烦.

是否有快捷方式,或者我可以使用的技巧,以快速更新所有子类的构造函数?

cbp*_*cbp 4

自从我提出这个问题以来,Resharper 现在添加了支持作为更改签名功能的一部分。

例如,要向基类中的构造函数添加参数,请使用以下方法:

  1. 右键单击要更改的构造函数,选择“Refactor”->“Change Signature”。

  2. 进行所需的更改,然后单击“下一步”。选择“使用调用树解决”,然后单击“下一步”。

  3. 您将进行更改,并且 Visual Studio 中的某个位置将打开一个标题为“重构 - 更改签名”的窗口。该窗口中将显示继承类的列表。

  4. 双击每个类并选择“在构造函数 y 中创建参数 x”