我有使用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个属性。那么这不是正确的解决方案吗?
那么正确的解决方案是什么?我在不同的类/接口实现中多次遇到这个问题,并想在这些情况下设计一些帮助。
这些参数/属性的值来自哪里?配置文件?或从用户? –