我需要配置某些接口的不同实现,并使其基于Web.config设置解析。 所以,拥有IExternalService接口我想拥有TestExternalService和ExternalService。我在Web.config中设置了“TestMode”应用程序。 如何在Castle Windsor中注册TestExternalService和ExternalService,以便在例如TestMode为0时解析ExternalService,并且当TestMode为1时,则解析TestExternalService。
答案 0 :(得分:2)
答案 1 :(得分:1)
我建议采取两种方法之一。如果您有大量需要根据此设置更改的服务,那么我将实现两个版本的IWindsorInstaller接口并根据web.config设置加载正确的一个。
var container = new WindsorContainer();
var testMode= WebConfigurationManager.AppSettings["Testmode"];
if(testMode == "1") {
container.Install(new [] { new TestServiceInstaller() });
else
container.Install(new [] { new ServiceInstaller() });
如果您只有一个或两个需要更改的服务,您可以编写一个IWindsorInstaller实例,并将用于注册该组件的逻辑放在安装程序中。
var testMode = WebConfigurationManager["TestMode"];
if(testMode == "1") {
container.Register(Component.For<IExtenalService>().ImplementedBy<TestExternalService>())
}
else
{
container.Register(Component.For<IExternalService>().ImplementedBy<ExternalService>();