我正在尝试配置服务的具体实现的某些属性,该服务的某些属性设置为不同的值,具体取决于在启动时选择的配置文件,但 NSB 似乎不允许在接口的实现上配置属性。如果相关的话,我们正在使用 Castle Windsor 作为容器。
我们最初使用从 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.
.
是否可以在不将属性添加到接口中的情况下对具体实现进行属性注入?