DIとコンストラクタのパラメータを組み合わせる?
2023-08-15 11:58:20
質問
コンストラクタ注入と手動コンストラクタ・パラメータを組み合わせるにはどうしたらよいでしょうか。
public class SomeObject
{
public SomeObject(IService service, float someValue)
{
}
}
IServiceはDIコンテナによって解決/注入される必要があり、someValueは指定される必要があります。この2つを混ぜるにはどうしたらよいでしょうか?
どのように解決するのですか?
このような構成は可能な限り避けるべきです。したがって、自分自身に問いかけてみてください。このパラメータはコンストラクタの引数として本当に必要なのでしょうか?または、オブジェクト上で実行するメソッドにパラメータを渡すことで、SomeObject をそれに依存するすべての人によって再利用されるステートレスなものに置き換えることができるでしょうか。
例:代わりに
public class SomeObject
{
private float someValue
public SomeObject(IService service, float someValue)
{
this.someValue = someValue
}
public float Do(float x)
{
return this.Service.Get(this.someValue) * x;
}
}
使用
public class SomeObject
{
public SomeObject(IService service)
{
}
public float Do(float x, float someValue)
{
return this.Service.Get(someValue) * x;
}
}
必要であれば、工場に行く。
public interface ISomeObjectFactory
{
ISomeObject CreateSomeObject(float someValue);
}
public class SomeObjectFactory : ISomeObjectFactory
{
private IKernel kernel;
public SomeObjectFactory(IKernel kernel)
{
this.Kernel = kernel;
}
public ISomeObject Create(float someValue)
{
return this.kernel.Get<ISomeObject>(WithConstructorArgument("someValue", someValue);
}
}
プレビューです。 Ninject 2.4では実装は必要なくなりますが
kernel.Bind<ISomeObjectFactory>().ToFactory(); // or maybe .AsFactory();
関連
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】Moqを使用してメソッド呼び出しを検証する
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する
-
[解決済み] C#でベースコンストラクタを呼び出す
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] コンストラクタ内の仮想メンバー呼び出し
-
[解決済み] あるコンストラクタを別のコンストラクタから呼び出す
-
[解決済み] C#4 インターフェースで定義されたオプションパラメータは、なぜ実装クラスで強制されないのですか?
-
[解決済み】.NETで構造体のデフォルトコンストラクタを定義できないのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み] 関数を終了するには?
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である