6

autofac を既存のプロジェクトに追加していますが、一部のサービス実装では、Initialize メソッドを呼び出して構成情報を渡す必要があります。現在、私はコードを使用しています:

builder.Register(context =>
                 {
                    var service = 
                         new SqlTaxRateProvider(context.Resolve<IUserProvider>());
                    service.Initialize(config);
                    return service;
                 }
).As<ITaxService>()
.SingleInstance();

これは機能しますが、私はまだオブジェクトを自分で作成しています. カスタム初期化を実行する作成後の操作を構成することは可能ですか?

私が何を求めているかを理解してもらうために、理想的には次のコードになります。

builder.RegisterType<SqlTaxRateProvider>()
 .As<ITaxService>()
 .OnCreated(service=> service.Initialize(config))
 .SingleInstance();

更新: Autofac-2.1.10.754-NET35 を使用しています

4

1 に答える 1

10
.OnActivating(e => e.Instance.Initialize(...))

トリックを行う必要があります。

また、Startable モジュールを調査することもできます ( Autofac wiki の Startable エントリを参照してください)。

コンストラクターで初期化を行うというマークの提案も良いものです。その場合は使用

.WithParameter(new NamedParameter("config", config))

構成パラメーターを他のコンストラクターの依存関係とマージします。

于 2010-02-24T20:30:44.543 に答える