温莎城堡:如何将呼叫添加到不在xml中的工厂设施中?
时间:2020-03-05 18:53:50 来源:igfitidea点击:
我知道如何告诉Castle Windsor使用XML从工厂的方法中解析引用,但是我可以通过Container.AddComponent()接口以编程方式进行引用吗?如果没有,还有其他方法可以通过代码来实现吗?
编辑:
似乎有些混乱,所以让我澄清一下,我正在寻找一种在代码中执行以下操作的方法:
<facilities> <facility id="factory.support" type="Castle.Facilities.FactorySupport.FactorySupportFacility, Castle.MicroKernel" /> </facilities> <components> <component id="CustomerRepositoryFactory" type="ConsoleApplication2.CustomerRepositoryFactory, ConsoleApplication2" /> <component id="CustomerRepository" service="ConsoleApplication2.ICustomerRepository, ConsoleApplication2" type="ConsoleApplication2.CustomerRepository, ConsoleApplication2" factoryId="CustomerRepositoryFactory" factoryCreate="Create" /> </components>
(摘自Windsor和spring.net中有关工厂支持的代码撰写文章)
解决方案
回答
直接从单元测试FactorySupportTestCase(朋友):
[Test] public void FactorySupport_UsingProxiedFactory_WorksFine() { container.AddFacility("factories", new FactorySupportFacility()); container.AddComponent("standard.interceptor", typeof(StandardInterceptor)); container.AddComponent("factory", typeof(CalulcatorFactory)); AddComponent("calculator", typeof(ICalcService), typeof(CalculatorService), "Create"); ICalcService service = (ICalcService) container["calculator"]; Assert.IsNotNull(service); } private void AddComponent(string key, Type service, Type type, string factoryMethod) { MutableConfiguration config = new MutableConfiguration(key); config.Attributes["factoryId"] = "factory"; config.Attributes["factoryCreate"] = factoryMethod; container.Kernel.ConfigurationStore.AddComponentConfiguration(key, config); container.Kernel.AddComponent(key, service, type); }