Kam*_*agi 6 c# static dependency-injection class
I need to use Dependency Injection in a static class.
the method in the static class needs the value of an injected dependency.
以下代码示例演示了我的问题:
public static class XHelper
{
public static TResponse Execute(string metodo, TRequest request)
{
// How do I retrieve the IConfiguracion dependency here?
IConfiguracion x = ...;
// The dependency gives access to the value I need
string y = x.apiUrl;
return xxx;
}
}
Run Code Online (Sandbox Code Playgroud)
You basically have two options:
static to an instance class and supply IConfiguracion through Constructor Injection.IConfiguracion to the Execute method through Method Injection.Here are examples for each option.
Change the class from static to an instance class and supply IConfiguracion through Constructor Injection. XHelper should in that case be injected into the constructor of its consumers. Example:
public class XHelper
{
private readonly IConfiguracion config;
public XHelper(IConfiguracion config)
{
this.config = config ?? throw new ArgumentNullException(nameof(config));
}
public TResponse Execute(string metodo, TRequest request)
{
string y = this.config.apiUrl; //i need it
return xxx; //xxxxx
}
}
Run Code Online (Sandbox Code Playgroud)
IConfiguracion to the Execute method through Method Injection.Example:
public static class XHelper
{
public static TResponse Execute(
string metodo, TRequest request, IConfiguracion config)
{
if (config is null) throw new ArgumentNullException(nameof(config));
string y = config.apiUrl;
return xxx;
}
}
Run Code Online (Sandbox Code Playgroud)
All other options are off the table because they would either cause code smells or anti-patterns. For instance, you might be inclined to use the Service Locator pattern, but that's a bad idea because that's an anti-pattern. Property Injection, on the other hand, causes Temporal Coupling, which is a code smell.