我正在开发一个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调用。