0

我需要我的单身服务取决于每个Web请求对象,并且我想使用Castle的TypedFactoryFacility为我的对象自动创建工厂。城堡工厂短期生活依赖

我的注册看起来像这样:

我在web.xml中也注册了每Web请求的续航时间,工厂接口看起来是这样的:

public interface IMailMessageQueueProvider 
    { 
     IMailMessageQueue Get(); 
    } 

而且我得到这个不错的错误:

Type Model.IMailMessageQueueProvider is abstract. 
As such, it is not possible to instansiate it as implementation of service   
Model.IMailMessageQueueProvider. 

为什么城堡不创建工厂?

这是我跟一个参考:http://stw.castleproject.org/Windsor.Typed-Factory-Facility-interface-based-factories.ashx

+0

哪个版本是? – 2012-03-30 22:10:19

+0

只是为了踢,尝试重命名'Get'方法到别的东西('BuildCreateMailMessageQueue'或类似的东西) – 2012-03-30 22:11:54

+0

我使用2.5,与其他名称早些时候尝试:创建()和GetIMailMessageQueue(),我可以尝试其他人。 .. – 0lukasz0 2012-03-30 22:15:13

回答

1

我终于发现我失踪了。我使用默认实现的微内核:

IKernel kernel = new DefaultKernel(); 

这是缺少动态代理支持。有两个解决方案,要么以微内核坚持和添加动态代理工厂的依赖:

IKernel kernel = new DefaultKernel(new DefaultProxyFactory()); 

或切换到Castle Windsor Container

0

而不是创建要实例各类型的特定工厂(例如,您IMailMessageQueueProvider),一个滑头的方法可能是创建一个通用的工厂: - 通常的方式

public interface IServiceFactory 
{ 
    T Create<T>(); 
    void Release(object service); 
} 

与温莎注册它: -

container.Register(Component.For<IServiceFactory>().AsFactory()); 

将IServiceFactory注入要执行实例化的类中,然后调用Create方法。例如。

var queue = _factory.Create<IMailMessageQueue>();