I have come across several posts where a single interface is implemented by multiple classes and the dependency is registered and resolved. One such post is this one.
But how to resolve multiple, multi-level dependencies?
For example:
public enum ShortEnum { Short, Long }
public interface ISomeValidator
{
bool ValidateInputString(string str);
}
public class ConValidator : ISomeValidator
{
public bool ValidateInputString(string str) => true;
}
public class DonValidator : ISomeValidator
{
public bool ValidateInputString(string str) => false;
}
public class ConProvider : ISomeProvider
{
ISomeValidator conValidator; // Expects instance of ConValidator
public ConProvider(ISomeValidator someValidator)
{
conValidator = someValidator;
}
}
public class DonProvider : ISomeProvider
{
ISomeValidator donValidator; // Expects instance of DonValidator
public DonProvider(ISomeValidator someValidator)
{
donValidator = someValidator;
}
}
ShortEnum
can be used as key. That means depending upon its value, either ConProvider
or DonProvider
is returned. Now, the providers have a dependency on ISomeValidator
, which, again depending upon the key value of ShortEnum
can be resolved as the instance of ConValidator
or DonValidator
.
In other words, I want to build the following two object graphs:
var provider1 = new ConProvider(new ConValidator());
var provider2 = new DonProvider(new DonValidator());
What is the best way to utilize .NET Core 3.1 in-built dependency injection mechanism?