私はウィンザーに次のようなシナリオのパターンがあるのだろうかと思っていました。城ウィンザーサービスオーバーライドデフォルトのオーバーライド
基本的に私は登録されているサービス(DefaultService)を持っており、すべてのインスタンスに対してサービス(DefaultService)を(PluginBasedService)に置き換えるプラグインを持っています。
私は現在、ハッキング-Kernel.RemoveComponent()を使用していて、プラグインベースのサービスを再追加しています。これはハッキーなようだ。 IHandleSelectorもこのシナリオではハッキーです。
「最後に登録した」サービスを解決するAutofacのアプローチも私にとっては役に立ちます。
乾杯、 クリス
public class VM
{
public VM(IService)
{
}
}
public interface IService {}
public class DefaultService : IService {}
public class PluginBasedService : IService {}
Container.Register(
Component.For<IService>().ImplementedBy<DefaultService>(),
Component.For<VM>()
);
// this is called in a dynamically loaded assembly, after the default service has been registered
Container.Register(
Component.For<PluginBasedService>()
.ServiceOverrides(ServiceOverride.ForKey<IService>.Eq<PluginBasedService>())
);
Container.Resolve<IService>() // is DefaultService -> I want "PluginBasedService"
少し整理しました。私は子供の容器を見て、彼らが私の問題を解決するかどうかを見ます。ありがとう – Chris
BTW、Windsor(v3)の次期バージョンでは、サービスを登録するときにコンポーネントを強制的にデフォルトにすることができます。 –