【问题标题】:using same implementation with different lifestyles Windsor使用相同的实现不同的生活方式温莎
【发布时间】:2011-05-24 08:54:22
【问题描述】:

我有这样的课:

public FooRepo : IFooRepo
{
   public FooRepo(IDbContextFactory factory)
   {
      context = factory.GetContext();
   }
}

在我的应用程序中,我使用LifeStyle.PerWebRequest 注册所有内容, 但现在我需要像这样调用一个使用 IFooRepo 的方法(因为这需要大约一个小时):

{
 ...
    ThreadPool.QueueUserWorkItem(s => RequestReport(number));
 ...
}
private void RequestReport(int number)
{
// IFooRepo needed here
}

问题是我大部分时间都需要这个 IFooRepo 和 PerWebRequest 生活方式,我还需要在线程中保持活力,它还有一个依赖 IDbContextFactory 我不知道我是否需要也以不同的方式注册它

【问题讨论】:

    标签: castle-windsor ioc-container


    【解决方案1】:

    然后注册您的FooRepo 两次并注册setup service override 以供在ThreadPool 上使用的人使用其他组件。很简单。

    【讨论】:

    • @Krzysztof Koźmic 我还必须注册两次 IDbContextFactory 吗?什么是“设置服务覆盖”?
    • 在给定的上下文中,您需要设置两次没有意义的每个网络请求。我使用有关服务覆盖的文档链接更新了答案
    • @Krzysztof Koźmic 而不是构造函数注入,我必须使用通过字符串键解析?
    • 没有。以对组件的实现类型透明的方式使用服务覆盖。
    • @Krzysztof Koźmic 我在不同的类 Class1(IFooRepo repo) 和 Class2(IFooRepo repo) 中有构造函数,默认情况下 class1 需要 perwebrequest 而 class2 需要瞬态,这可以以某种方式指定,或者我做 .Resolve (键
    猜你喜欢
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多