如何让温莎容器处置带有 Lifestyle=Thread 的实例
我正在将温莎容器用于 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论