2009-12-03 47 views
4

實例當我使用這個註冊:溫莎城堡:UsingFactoryMethod不能與一個奇怪的錯誤

container.Register(
    Component 
     .For<IFooFactory>() 
     .ImplementedBy<FooFactory>(), 
    Component 
     .For<IFoo>() 
     .UsingFactoryMethod(kernel => kernel.Resolve<IFooFactory>().CreateFoo()) 
); 

我得到這個異常:

Castle.MicroKernel.ComponentRegistrationException:類型MyNamespace.IFoo是抽象。 因此,它是不可能的instansiate它作爲實施MyNamespace.IFoo服務

的我真的不知道是什麼問題。但是堆棧跟蹤顯示,在「DefaultComponentActivator.CreateInstance()」,以下條件成功,然後引發錯誤:

if (createProxy == false && Model.Implementation.IsAbstract) 

我需要的一些代理這裏的排序? 註冊是否錯誤?

回答

10

從短消息看來你還沒有註冊IFooFactory

另外您需要添加對工廠方法的支持。請在您註冊之前先打電話給我們:

container.AddFacility<Castle.Facilities.FactorySupport.FactorySupportFacility>(); 
+0

IFooFactory已註冊。我錯過了對AddFacility()的調用。謝謝! – shovavnik 2009-12-03 15:07:04

+3

請注意,從Windsor 2.5開始不再需要'FactorySupportFacility'(hurray!) – 2011-05-04 17:02:32

+0

非常感謝 - 這讓我瘋狂!我正在使用溫莎的一個更高版本作爲不同的解決方案,並沒有意識到這是溫莎老版本所要求的。 – 2016-09-07 17:31:32