У меня проблема с использованием DI со свойствами конструктора. Я строю PDFBuilder
на основе моего IPDFBuilder
.DI с использованием динамического впрыска конструктора
public interface IPDFBuilder
{
string templatefilepath { get; }
string templatefilename { get; }
Dictionary<string, string> dict { get; }
void CreatePDF();
}
public class PDFBuilder : IPDFBuilder
{
public string templatefilename { get; private set; }
public string templatefilepath { get; private set; }
public Dictionary<string, string> dict { get; private set; }
public PDFBuilder(string templatefilename, string templatefilepath, Dictionary<string, string> dict)
{
this.templatefilename = templatefilename;
this.templatefilepath = templatefilepath;
this.dict = dict;
}
public void CreatePDF() {
//Do something
}
}
Это PDFBuilder
может и будет использоваться в нескольких контроллерах, например:
public class KeuringController : Controller
{
private IPDFBuilder _PDFBuilder;
public KeuringController(IPDFBuilder pdfBuilder)
{
_PDFBuilder = pdfBuilder;
}
//Action methods that use `PDFBuilder` below...
}
Однако, я не могу установить свойство PDFBuilder
в классе запуска (где регистрация DI является неоспоримым сделана), поскольку разные контроллеры будут использовать разные значения для свойств класса PDFBuilder
. 1 простым решением было бы просто сделать сеттеры свойств общедоступными, поэтому в методе действий я могу установить значения, а затем позвонить CreatePDF()
. Однако это не так. Другим простым решением было бы удалить свойства класса и просто передать 3 свойства PDFBuilder
как свойства метода к CreatePDF
метода, как это:
public void CreatePDF(string templatefilename, string templatefilepath, Dictionary<string, string> dict) {
//Do something
}
Но теперь давайте говорить, что моя PDFBuilder
whould есть 10 способов, которые все нуждаются в них 3 объекта. Тогда это не правильное решение?
Что было бы правильным решением тогда? Я столкнулся с этой проблемой несколько раз с различными реализациями классов/интерфейсов и хотел бы иметь некоторую помощь при проектировании в этих ситуациях.
Откуда берутся значения этих параметров/свойств? Файл конфигурации? Или от пользователя? –