0

以下のコードは正常に機能しており、DummyComponnentクラスのインスタンスを正常に作成しています。CreatDummyComponnent() しかし、ファクトリメソッド名をメソッド名の先頭としてCreatGetDummyComponnent()以外に変更した場合、問題が発生します。たとえば、例外がスローされます。ファクトリメソッドに指定する命名規則はありますか?AnyThingComponent

using System;
using Castle.Facilities.TypedFactory;
using Castle.MicroKernel.Registration;
using Castle.Windsor;

namespace AsFactoryImplementation
{
    public interface IDummyComponnentFactory
    {
        IDummyComponnent CreatDummyComponnent();
//        void Relese(IDummyComponnent factory);
    }

    public interface IDummyComponnent
    {
        void Show();
    }

    public class DummyComponnent:IDummyComponnent
    {
        public DummyComponnent()
        {
            Console.WriteLine("we are working here");
        }
        public void Show()
        {
            Console.WriteLine("just testing this for better performance");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var container = new WindsorContainer();
            container.AddFacility<TypedFactoryFacility>();

            container.Register(Component.For<IDummyComponnent>().ImplementedBy<DummyComponnent>().Named("FirstConnection"),
                Component.For<IDummyComponnentFactory>().AsFactory());

            var val = container.Resolve<IDummyComponnentFactory>();
            var iDummy = val.CreatDummyComponnent();
            iDummy.Show();
                Console.WriteLine("OK its done ");
                Console.ReadLine();
        }
    }
}
4

1 に答える 1

0

Getで開始することを除いて、ファクトリでメソッド名を開始するために何でも使用できるはずです。

Getで開始すると、インターフェイスではなく名前でコンポーネントを解決しようとします。したがって、あなたの例で機能するのは次のとおりです。

var iDummy = val.GetFirstConnection();

幸運を、

Marwijn。

于 2013-02-18T15:26:10.313 に答える