如何让温莎容器处置带有 Lifestyle=Thread 的实例

发布于 2024-10-19 17:53:00 字数 755 浏览 1 评论 0原文

我正在将温莎容器用于 win 服务。 我使用 Linq2sql 来实现持久性目的。 Linq2Sql DC 的实例已注入到 2 个组件 UnitOfWork 和 Repository 中 我可能会将 DC+UoW+Repository 的 Lifestyle 设置为 Singleton,但我担心从长远来看,我的 DC 将保留许多影响内存的实体,而对我的应用程序没有任何原因:在我完成一个实体后,我不会'不再使用它,但 DC 上没有公共方法来清除缓存。

由于我的 DC 将注入 2 个组件,所以我不能使用 Lifestyle.Transient,否则将创建 2 个实例(每次注入一个),

所以我决定将 Lifestyle 设置为 Thread:我的应用程序有计时器每 n 分钟执行一次作业,每个实例滴答作响,我启动了一个新线程。 在这种情况下,将在每个线程上创建一个新的 DC,并将其注入到 2 cmps 中,如上所述。由于 Lifestyle=Thread 的处置策略与单例相同(在容器处置/我的应用程序结束/停止时),我担心容器中保留的对象数量,直到 winservice 停止。

因为我在我的线程上调用了 Join(),所以我现在就知道它什么时候结束。我本来想 从容器中提取我的 3 个对象并调用 dispose,但我不喜欢这种方法:我更喜欢让容器处理他自己的对象...

有什么意见/建议吗?

我还想创建自己的 Lifestyle 来完成线程结束时的处理,基本上模拟使用 PerWebRequest 的 Web 场景中发生的情况(在请求结束时,所有 cmps 将被处理)。有没有如何创建自定义生活方式的示例?

I'm using windsor container into a win service.
I'm using Linq2sql for persistence purpose.
An instance of Linq2Sql DC has been injected into 2 component UnitOfWork and Repository
I might set Lifestyle to Singleton for DC+UoW+Repository, but I'm concern in a long-term my Dc will hold to many enitites affecting memory without any reason for my app: after I'm done with an entity I won't use it anymore, but there's no public method on DC to clear cache.

Due my DC will injected into 2 components, I cannot use Lifestyle.Transient otherwise 2 instances will be created(one per each injection)

So I decided to set Lifestyle to Thread: my app has timer to execute a job every n minutes, on each ticking I kick a new thread.
In that case a new DC will be create on each thread and that injected into 2 cmps as above. Since disposing policy for Lifestyle=Thread are same as singleton(on container disposing/end of my app/on stop), I'm concern about amount of object hold into container until winservice will be stopped.

Since I call Join() on my thread, I exaclty now when it will be over. I was thinking to
extract from the container my 3 objs and call dispose, but I don't like this approach: I prefer have the container dealing with his own objects...

Any comments/suggestion?

I was also thinking to create my own Lifestyle to accomplish my disposing at the end of the thread, basically simulating what happend into a web scenario with PerWebRequest(at the end of the request all cmps will be disposed). Is there any sample how to create custom Lifestyle?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文