У меня есть модуль Ninject, которая в основном что-то вдоль линий:Поддерживает ли Ninject временную инъекцию?
public class ExternalApiService {
public string BaseUriAddress {get; set;}
public string EndpointAddress {get; set;}
}
Тогда в моих различных классов я делаю следующее:
[Inject]
public IExternalApiService ExternalApiService {get; set;}
Инъекции прекрасно работает, но проблема у меня есть заключается в том, что когда я прихожу к использованию службы в своем коде, мне нужно вручную ввести BaseUriAddress
и EndpointAddress
. Это немного раздражает, так как это означает, что мне нужно создать некоторые конструкторы и ручной IOC, который сводит на нет точку в структуре IOC.
Я видел, что я могу сделать конструктор и инъекцию поля, однако, похоже, все они определены во время компиляции. Это не совсем правильно, потому что всякий раз, когда я использую ExternalApiService
, мне не гарантирован тот же базовый адрес и адрес конечной точки.
В идеале я ищу способ указать эти аргументы во время выполнения, используя Ninject, но с трудом находил, как это возможно. В идеале что-то вроде этого:
[Inject(BaseUriAddress = "", EndpointAddress = "")]
public IExternalApiService ExternalApiService {get; set;}
Очевидно, что не совсем, но это по сути вид функциональности, что я пытаюсь реализовать. Это возможно?
Почему вы хотите внедрить модуль в свои компоненты? Это не имеет смысла. Модуль является частью вашего [Root Composition] (http://blog.ploeh.dk/2011/07/28/CompositionRoot/). Никакой код не должен относиться к корню композиции, тогда как корень композиции должен ссылаться на все. Или вы не говорите о [Ninject Modules] (https://github.com/ninject/ninject/wiki/Modules-and-the-Kernel)? – Steven
Является ли «ExternalApiService» синглоном (что-то, что вы создаете один раз, а затем снова и снова повторно использовать) или переходным процессом (что-то потенциально может быть несколько экземпляров)? Вы можете использовать фабрику для создания переходных классов, для которых требуется несколько параметров при построении, но это не будет полезно для одноэлементного. – Sarah
Это переходный период – mike