将实例生存期限制为单次迭代

时间:2010-07-30 10:57:21

标签: c# dependency-injection inversion-of-control castle-windsor

我正在开发一个Web应用程序,它使用一些服务来与外部资源同步数据。应用程序和服务共享相同的数据层,并使用Castle Windsor实现IoC。

在Web应用程序中,存在一种PerWebRequest生活方式,它将实例的生命周期限制为请求的生命周期。我想在服务中使用类似的东西。 每隔一段时间触发一次服务以进行同步。我希望数据层中的服务和存储库在服务的单个迭代中成为单例,类似于Web应用程序中的PerWebRequest生活方式。

我提出的是 Run 的概念。运行是服务中同步代码的单个调用。看起来像这样:

   using( _runManager.Run() )
   {
      var sync = _usageRepoFactory.CreateInstance();
      sync.SynchronizeUsage();
   }

IRun的实现将释放PerRunLifeStyle的所有实例,因为它在using块的末尾处理时被创建。 这段代码看起来很干净,但我想知道是否有更好的方法。我尝试使用子容器,但在分析解决方案之后发现这些相当“重”。

欢迎任何反馈。如果需要,我也可以发布IRun实现。

更新

根据评论,我已经清理了一些代码。我引入了一项新服务IRunManager,它基本上是IRun的工厂。我也开始使用工厂来摆脱ServiceLocator调用。

1 个答案:

答案 0 :(得分:0)

看看这个contextual lifestyle