Я знаю, как сообщить 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>
(из этой статьи codebetter о заводской поддержке в windsor и spring.net)





Непосредственно из Unit Test 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);
}