起動時に選択されたプロファイルに応じていくつかのプロパティが異なる値に設定されているサービスの具体的な実装のいくつかのプロパティを構成しようとしていますが、NSB はインターフェイスの実装でのプロパティの構成を許可していないようです。関連する場合は、コンテナーにキャッスル ウィンザーを使用しています。
最初に、次のように EndpointConfig クラスから実行されるサービス インストーラーを使用してコンテナーをセットアップします。
public class EndpointConfig : IConfigureThisEndpoint,
AsA_Publisher,
IWantCustomInitialization
{
public void Init()
{
Configure.With()
.CastleWindsorBuilder(CreateContainer(new ServiceInstaller()))
.UnicastBus()
.XmlSerializer()
;
}
protected WindsorContainer CreateContainer(IWindsorInstaller installer)
{
var container = new WindsorContainer();
container.Register(Component.For<IWindsorContainer>().Instance(container));
container.Install(installer);
container.Kernel.ReleasePolicy = new Castle.MicroKernel.Releasers.NoTrackingReleasePolicy();
return container;
}
}
public class ServiceInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Component.For<IService>().ImplementedBy<ServiceAdapter>());
// ...
}
}
ServiceAdapter には、選択されているプロファイルに応じて異なる設定を必要とするインターフェイスにないいくつかの文字列プロパティがあります。
public interface IService
{
}
public class ServiceAdapter : IService
{
public string Url;
}
プロファイル ハンドラーは次のことを行います。
Configure.Instance.Configurer.ConfigureProperty<ServiceAdapter>
(x => x.Url, "http://url.goes.here");
しかし、プロファイルが読み込まれると、 がスローされSystem.InvalidOperationException: Cannot configure property for a type which hadn't been configured yet. Please call 'Configure' first.
ます。
インターフェイスにプロパティを追加せずに、具体的な実装でプロパティの注入を行うことは可能ですか?