Не ссылаться на объект контроллера на другие классы.
Вместо этого указывайте только информацию, которая требуется для класса.
public class ResourcesServices
{
public ResourceServices(IDictionary<string, string> parameters)
{
var extraParameters = parameters;
}
}
Если вы используете Dependency Injection и ExtraParameters
известны только во время выполнения (ResourcesServices
экземпляр не может быть создан).
Затем рассмотрите возможность передачи параметров методу ResourcesServices
, который будет их использовать.
public class ResourcesServices
{
public ResourceServices() { }
public void DoSomething(IDictionary<string, string> parameters)
{
var extraParameters = parameters;
}
}
Когда класс ResourceServices
требует предоставления «ExtraParameters»в конструкторе вы можете создать фабричный класс, который будет отвечать за создание правильного экземпляра ResourceServices
со значениями времени выполнения.
public class ResourcesServicesFactory
{
public ResourcesServicesFactory() { }
public ResourcesServices Create(IDictionary<string, string> parameters)
{
return new ResourcesServices(parameters);
}
}
public class ChildController : MyBaseController
{
private readonly ResourceServiceFactory _factory;
public ChildController(
ILogger<BaseController> logger,
VVDCCore.Tools.Interfaces.IResourceManager resxManager,
ResourceServiceFactory factory) : base(logger, resxManager)
{
_factory = factory;
}
public IActionResult Get()
{
var service = _factory.Create(ExtraParameters);
service.DoSomething();
}
}
Рассматривайте контроллер как точку входа вашего приложения, основная ответственность которого передается через «ввод»в службу и вернуть вывод клиенту.