温莎城堡:TypedFactoryFacility,通用工厂和潜在的生活方式不匹配

时间:2014-05-15 06:53:43

标签: c# dependency-injection castle-windsor typed-factory-facility

我将TypeFactoryFacility与通用工厂一起使用,以避免容器在需要之前实例化组件。通用工厂看起来像这样:

public interface IGenericFactory<T> {
   T Create();
   void Release(T dummyComponent);
}

后来我以下列方式使用它:

container.Register(
    Component.For<IGenericFactory<IUtilityService>>().AsFactory());
container.Register(
    Component.For<IUtilityService>().ImplementedBy<UtilityService>()
        .OnCreate(WireUpAttibutes).LifeStyle.PerWebRequest);

然后我使用IGenericFactory<IUtilityService>作为构造函数参数,并在需要使用该组件时调用Create()。在我正在处理的Web应用程序的上下文中,将UtilityService绑定到Web请求非常重要(这就是它在LifeStyle.PerWebRequest注册的原因)

当我查看容器调试器视图“潜在的生活方式不匹配”​​时,我收到一条消息:

  

具有生活方式Singleton *的组件'IGenericFactory'   取决于'TypedFactoryInterceptor'与生活方式瞬态这个   通常不需要那种依赖性,并可能导致各种各样的依赖   各种各样的错误。

如果我注册通用工厂:

container.Register(Component.For<IGenericFactory<IUtilityService>>()
    .AsFactory().LifestylePerWebRequest());

然后消息消失了,但我想知道我是否输了,因为现在Windsor将为每个网络请求创建一个工厂。这比解决IUtilityService便宜,但只需要使用单件工厂就好了,因为这个工厂没有任何依赖。 (由我创建)

注册组件是一个问题吗? 工厂是否会根据Web请求解析组件IUtilityService?

0 个答案:

没有答案
相关问题