Dependency injection toolset upgrade
Dependency injection is probably the best thing in software development since slide bread. I often blog about related things and I also have a Visual Studio extension to help those who apply the principles in practice.
Guard clauses in constructors
An important piece of best-practice is that whenever you use constructor injection, you should check your arguments for null values (after all, constructor injection is best used for required dependencies). This is known as a guard clause:
public class MyService
{
private readonly IDependency dependency;
public class MyService(IDependency dependency)
{
if (dependency == null)
throw new ArgumentNullException("dependency");
this.dependency = dependency;
}
}
My VS extension did not account for this best practice unfortunately. A user of the toolset was kind enough to point this out on Github, and I totally agree that this should be part of constructor.
So now, you can use my extension from the marketplace to generate constructors that take this into consideration:
Obviously this could be made a lot better with the features of "new-generation" C#: the nameof
operator of C# 6 and throw expression from C# 7. Unfortunately, I have not found any way to determine the proejct language version from inside a CodeRefactoringProvider
. I went to Stackoverflow and asked a question about it, but no definite answer for now. If you have any ideas, feel free to join the discussion there or at Github, or even issue a PR yourself.
And of course, download the tool ;)