我有使用DI與構造函數屬性的問題。我正在根據我的IPDFBuilder
構建PDFBuilder
。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登記beeing完成),因爲不同的控制器將對PDFBuilder
類的屬性使用不同的值。一個簡單的解決方案就是讓屬性的setter公開,以便在一個操作方法中我可以設置這些值,然後調用CreatePDF()
。然而這並不正確。另一種簡單的解決辦法是刪除類的屬性,只是傳遞的PDFBuilder
作爲方法屬性的3個屬性的CreatePDF
方法是這樣的:
public void CreatePDF(string templatefilename, string templatefilepath, Dictionary<string, string> dict) {
//Do something
}
但是,現在讓我們說,我PDFBuilder
對子級有10種方法,這都需要這些3個屬性。那麼這不是正確的解決方案嗎?
那麼正確的解決方案是什麼?我在不同的類/接口實現中多次遇到這個問題,並想在這些情況下設計一些幫助。
這些參數/屬性的值來自哪裏?配置文件?或從用戶? –