قلعة وندسور:كيف يمكنك إضافة مكالمة إلى منشأة مصنع ليست في XML؟

StackOverflow https://stackoverflow.com/questions/64238

سؤال

أعرف كيفية إخبار 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);
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top