使用Resharper从构造函数生成依赖注入字段?

时间:2018-03-20 21:16:43

标签: c# visual-studio resharper

在开始之前,请注意我是Resharper的新手并且可能会忽视某些事情。

我正在尝试使用Resharper自动化我的一些锅炉板代码。特别是我想自动将DI构造函数参数复制到私有字段。我大部分时间都遵循微软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的Null Checking选项,模板资源管理器以及我能找到的所有其他选项。但我似乎无法找到任何方法来修改行为或创建自己的行为。代码片段看起来正确,除了它们在光标上生成。包裹片段似乎也不正确。

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

1 个答案:

答案 0 :(得分:0)

好吧,这就像我能得到的一样近。我无法在一个热键中实现这一点,但两个足够接近。

让我们在没有我们的字段或空检查的情况下开始。

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

    }
}

db上使用 ctrl +。会生成一个选项,可以生成一个只读字段来存储该值。按Enter键接受它。 Resharper / VS现在会给你这个。

public class CreateModel : PageModel
{
    private readonly AppDbContext _db;

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

然后在db上再次使用 ctrl +。。你的光标应该还在那里。它将提供生成空检查。我以为会使用if语句,错了! Resharper将编辑赋值并将一个null传播运算符添加到throw中。你最终会这样做。

public class CreateModel : PageModel
{
    private readonly AppDbContext _db;

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

这正是我们想要的。