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?
If I understood it correctly, you want
ConValidator
instance forConProvider
andDonValidator
instance forDonProvider
and Providers should be resolved onShortEnum
value.we can modify dependencies like below
declare delgates
Consumer Service
In
ConfigureServices
method ofStartUp
class