実行時に、つまり、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.
}