캐슬 윈저:XML이 아닌 공장 시설에 대한 호출을 어떻게 추가합니까?
-
09-06-2019 - |
문제
XML을 사용하여 팩토리 메서드에서 참조를 확인하도록 Castle Windsor에 지시하는 방법을 알고 있지만 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>
해결책
단위 테스트 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);
}
제휴하지 않습니다 StackOverflow