実行時に、つまりContainerBuilder
がビルドされ、Container
が作成された(そしてContainerBuilder
が破棄された)後、サービスを登録することは可能ですか?
はい、できます。Update
でContainerBuilder
メソッドを使用します。
var newBuilder = new ContainerBuilder();
newBuilder.Register...;
newBuilder.Update(existingContainer);
ContainerBuilder.Updateは非推奨になっているため、新しい推奨事項は子のライフタイムスコープを使用することです。
ライフタイムスコープへの登録の追加
Autofacでは、ライフタイムスコープを作成するときに、「オンザフライ」で登録を追加できます。これは、ある種の「スポット溶接」の制限された登録オーバーライドを行う必要がある場合、またはグローバルに登録したくないスコープに追加のものが必要なだけの場合に役立ちます。これを行うには、ContainerBuilderを取得して登録を追加するラムダをBeginLifetimeScope()に渡します。
using(var scope = container.BeginLifetimeScope(
builder =>
{
builder.RegisterType<Override>().As<IService>();
builder.RegisterModule<MyModule>();
}))
{
// The additional registrations will be available
// only in this lifetime scope.
}