قلعة وندسور:كيف يمكنك إضافة مكالمة إلى منشأة مصنع ليست في XML؟
-
09-06-2019 - |
سؤال
أعرف كيفية إخبار 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);
}
لا تنتمي إلى StackOverflow