使用Windsor的工厂实例化

时间:2013-02-18 11:11:29

标签: naming-conventions castle-windsor

下面的代码工作正常,并成功为类 DummyComponnent 创建一个实例。 但是当我更改工厂方法名称CreatDummyComponnent()时出现问题 除了GetDummyComponnent()或除 Creat 之外的任何其他内容作为方法名称的开头,请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();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

除了以Get。

开头之外,你应该可以使用任何东西在Factory上启动方法名称

如果您从Get开始,它将尝试按名称而不是按界面解析组件。 那么在你的例子中可行的是:

var iDummy = val.GetFirstConnection();

祝你好运,

Marwijn。