编程语言
首页 > 编程语言> > C#-DI的构造函数的模板重构

C#-DI的构造函数的模板重构

作者:互联网

很抱歉,如果以前曾有人问过/回答过这个问题,我对这个主题的搜索使我想到了与我的任务没有直接关系的各种各样的主题.

我目前需要实现在内部代码库中重构大量构造函数的目标,以支持使用Ninject进行构造函数注入.当前,我们有大量的KernelInstance.Get< T>实例.作为吸气剂的特性,例如:

IRequiredService => StaticKernelReference.Get<IRequiredService>();

其中StaticKernelReference是对Ninject StandardKernel静态实例的引用(我知道这也被视为反模式,并且此重构是杀死对Ninject实例的所有静态引用的目标的一部分)

在远离这种显然被认为是反模式的方法的过程中,我想重构对这些方法的引用:

public class ClassWithDependencies {
  readonly IRequiredSevice _requiredService;
  public ClassWithDependencies(IRequiredService requiredService){
    _requiredService = requiredService;
  }
}

我的问题确实有两个方面,但是对任何一个问题的帮助将不胜感激.

>上面的示例是否为构造函数注入这些依赖关系提供了理想的方法(我对SO和其他方面的研究表明可以,但是如果我得出错误的结论,我将不胜感激.)我非常有信心这种方法是对我们现有方法的改进,但是如果不理想,我宁愿不必对该特定部分进行第二次重构.在大多数情况下,这些将不是可选的依赖项(这也是我使用构造函数注入模式的原因),并且我知道用于属性注入的[Inject]装饰器.
>我用resharper标记了这个问题,因为这是像这样的大规模重构唯一想到的东西.是否有任何好的方法来添加构造函数参数,然后代码片段/模板自动生成对构造函数中只读私有变量的赋值并向类中添加字段?虽然我可以手动执行此操作,但我预见到这非常繁琐且耗时,因为至少有数百个这种模式的实例被使用.

解决方法:

>是的,这种方法很好.向构造函数注入所需的依赖项会使它们显式可见.现在,要弄清类的依赖关系,除了检查其源代码外别无选择.当将它们注入构造函数时,情况不再如此.
>要快速修复当前代码,您可以执行以下操作.您有以下代码行:

IRequiredService SomeService => StaticKernelReference.Get<IRequiredService>();

首先删除名称后的所有内容:

IRequiredService SomeService;

那将使您的财产成为私有领域.然后alt输入并使用“从构造函数初始化字段”重构.然后你有这个:

IRequiredService Service;
public A(IRequiredService service) {
    Service = service;
}

然后继续输入alt输入“重命名为_service”(取决于您如何命名私有字段),然后再次输入alt输入并“将字段设为只读”.

readonly IRequiredService _service;
public A(IRequiredService service) {
    _service = service;
}

标签:dependency-injection,resharper,ninject,c,refactoring
来源: https://codeday.me/bug/20191110/2015245.html