コンストラクタのプロパティで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
クラスのプロパティに対して異なる値を使用するからです。 1つの単純な解決策は、プロパティの設定をパブリックにすることで、アクションメソッドでは値を設定してからCreatePDF()
を呼び出すことができます。しかし、これは正しいとは感じません。
public void CreatePDF(string templatefilename, string templatefilepath, Dictionary<string, string> dict) {
//Do something
}
しかし、今の私のPDFBuilder
は、これらすべてを必要とする10個の方法を持ってwhouldとしましょう:別の簡単な解決策は、クラスのプロパティを削除し、ちょうどこのようCreatePDF
メソッドにメソッド・プロパティとしてPDFBuilder
の3つのプロパティを渡すことであろう3プロパティ。それから、これは正しい解決策ではありませんか?
正しい解決策は何ですか?私はこの問題をさまざまなクラス/インターフェイスの実装で複数回遭遇しましたが、これらの状況での設計にいくつかの助けをしたいと思います。
これらのパラメータ/プロパティの値はどこから得られますか?設定ファイル?またはユーザーからですか? –