Ever since I started using constructor dependency injection in my .NET/.NET Core projects, there has been essentially a three step process to adding a new dependency into a class.
- Create a private readonly field in my class, with an underscore prefix on the variable name
- Edit the constructor of my class to accept the same type, but name the parameter without a prefix
- Set the private readonly field to be the passed in parameter in the constructor
In the end, we want something that looks like this :
public class UserService { private readonly IUserRepository _userRepository; public UserService(IUserRepository userRepository) { _userRepository = userRepository; } }
Well at least, this used to be the process. For a few years now, I’ve been using a nice little “power user” trick in Visual Studio to do the majority of this work for me. It looks a bit like this :
The feature of auto creating variables passed into a constructor is actually turned on by default in Visual Studio, however the private readonly with an underscore naming convention is not (Which is slightly annoying because that convention is now in Microsoft’s own standards for C# code!).
To add this, we need do the following in Visual Studio. The exact path to the setting is :
Tools => Options => Text Editor => C# => Code Style => Naming
That should land you on this screen :
The first thing we need to do is click the “Manage naming styles” button, then click the little cross to add. We should fill it out like so :
I would add that in our example, we are doing a camelCase field with an underscore prefix, but if you have your own naming conventions you use, you can also do it here. So if you don’t use the underscore prefix, or you use kebab casing (ew!) or snake casing (double ew!), you can actually set it up here too!
Then on the naming screen, add a specification for Private or Internal, using your _fieldName style. Move this all the way to the top :
And we are done!
Now, simply add parameters to the constructor and move your mouse to the left of the code window to pop the Quick Actions option, and use the “Create and Assign Field” option.
Again, you can actually do this for lots of other types of fields, properties, events etc. And you can customize all of the naming conventions to work how you like.
I can’t tell you how many times I’ve been sharing my screen while writing code, and people have gone “What was that?! How did you do that?!”, and by the same token, how many times I’ve been watching someone else code and felt how tedious it is to slowly add variables one by one and wire them up!