【问题标题】:Use Resharper To Generate Dependency Injection Fields From Constructor?使用 Resharper 从构造函数生成依赖注入字段?
【发布时间】:2018-03-20 21:16:43
【问题描述】:

在我开始之前,请注意我是 Resharper 的新手,可能会忽略一些东西。

我正在尝试使用 Resharper 来自动化我的一些样板代码。特别是我想自动将 DI 构造函数参数复制到私有字段。我在很大程度上遵循 Microsoft 的 Razor Pages 示例中的模式。

public class CreateModel : PageModel
{
    private readonly AppDbContext _db;

    public CreateModel(AppDbContext db)
    {
        _db = db;
    }
}

Resharper 做到了这一点,到目前为止一切都很好。但我也想像这样生成空传播。

public class CreateModel : PageModel
{
    private readonly AppDbContext _db;

    public CreateModel(AppDbContext db)
    {
        _db = db ?? throw new ArgumentNullException(nameof(db));
    }
}

我尝试查看 Resharper 的空值检查选项、模板资源管理器以及我能找到的所有其他选项。但我似乎找不到任何方法来修改行为或创建自己的行为。代码 sn-ps 看起来正确,只是它们在光标上生成。 Wrap sn-ps 似乎也不对。

所以我的问题是,如何在 Resharper(或普通的旧 Visual Studio)中创建这种行为?

【问题讨论】:

  • jetbrains.com/help/resharper/… 可选地生成带有空值检查的ctors,可能不是您想要的。看看
  • @DennisKuypers 我可能不得不放弃空合并运算符并以这种方式使用 Resharper 来生成空检查并单独分配。然后忽略VS的建议将它们结合起来。或者我想我可以让 VS 将它们组合为另一个步骤。感谢您的回复。

标签: c# visual-studio resharper


【解决方案1】:

好的,这是我能得到的最接近的。我无法用一个热键完成此操作,但两个足够接近。

让我们开始没有我们的字段或空检查。

public class CreateModel : PageModel
{
    public CreateModel(AppDbContext db)
    {

    }
}

db 上使用 ctrl+. 将导致生成一个只读字段来存储值的选项。按回车接受。 Resharper/VS 现在会给你这个。

public class CreateModel : PageModel
{
    private readonly AppDbContext _db;

    public CreateModel(AppDbContext db)
    {
        _db = db;
    }
}

接下来在db 上再次使用ctrl+.。你的光标应该还在。它将提供生成空检查。我以为会使用if 声明,错了! Resharper 将编辑分配并将空传播运算符添加到 throw 中。你会得到这个。

public class CreateModel : PageModel
{
    private readonly AppDbContext _db;

    public CreateModel(AppDbContext db)
    {
        _db = db ?? throw new ArgumentNullException(nameof(db));
    }
}

这正是我们想要的。

【讨论】:

    猜你喜欢
    • 2021-06-06
    • 1970-01-01
    • 2011-02-02
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 2018-06-17
    相关资源
    最近更新 更多