autofacでカスタム初期化を実行する方法
-
22-09-2019 - |
質問
私は、既存のプロジェクトにautofacを追加していると、サービス実装の一部が呼び出され、コンフィギュレーション情報を渡すことが彼らのInitializeメソッドが必要です。現在、私は、コードを使用しています:
builder.Register(context =>
{
var service =
new SqlTaxRateProvider(context.Resolve<IUserProvider>());
service.Initialize(config);
return service;
}
).As<ITaxService>()
.SingleInstance();
これは動作しますが、私はまだ私はここから逃げるとautofacが私のためにそれを処理することを可能にしようとしている何をしているオブジェクトを自分で作成しています。それは、カスタムの初期化を行ってしまう操作を作成ポストを設定することは可能ですか?
あなたに私は理想的には、このコードになります後だかのアイデアを与えるために、
builder.RegisterType<SqlTaxRateProvider>()
.As<ITaxService>()
.OnCreated(service=> service.Initialize(config))
.SingleInstance();
アップデート: 私が使用していますAutofac-2.1.10.754-NET35
解決
.OnActivating(e => e.Instance.Initialize(...))
トリックを行う必要があります。
またAutofacで始動可能エントリを参照してください(始動可能モジュールを調査するかもしれませんウィキに)。
コンストラクタで初期化を行うには、マークの提案も良いものです。その場合の使用では
.WithParameter(new NamedParameter("config", config))
他のコンストラクタ依存性でconfigパラメータをマージする。
所属していません StackOverflow