首页 / 知识
关于.net:Windsor容器:如何强制处置对象?
2023-04-16 16:55:00

Windsor Container: How to force dispose of an object?我有一个实现IDisposable的对象,该对象已在Windsor容器中注册,我想对其进行处理,因此将调用Dispose方法,并在下次调用Resolve时获取一个新实例。 是否
立即自动调用Dispose()吗? 还是我需要做
在文档中找不到有关Release确切功能的任何信息
编辑: 我认为这是人们在使用Windsor容器时并没有真正意识到的事情-尤其是经常令人惊讶的行为,即在容器的整个生命周期中,一次性瞬态组件在容器中一直保持着直到被处置,除非您自己释放它们-尽管它已被记录-在这里看看-但快速引用:
您可能会发现更容易的是将策略更改为NoTrackingReleasePolicy,然后自行处理-这同样有潜在的风险,但是如果您的生活方式是暂时的(或者如果处置容器时,您的应用程序将要关闭,则无论如何)这可能没什么大不了的。但是请记住,任何已经注入单例的组件都将保留一个引用,因此您最终可能会导致尝试"刷新"单例时出现问题-这似乎是一种不好的做法,我想知道您是否可以避免必须首先,通过改善应用程序的组合方式来做到这一点。 其他方法是使用其自己的停用实现来构建自定义生命周期(因此释放单例实际上将处置组件,就像瞬态生命周期一样)。 另一种方法是在容器中注册具有单一生活方式的服务装饰器,但在容器中注册具有过渡生活方式的实际基础服务-然后,当您需要刷新组件时,只需处置持有的过渡基础组件即可由装饰器替换为新解析的实例(使用components键而不是服务来解析它,以避免获取装饰器)-这样可以避免其他单例服务(未"刷新")的问题到已经过时的服务上,这些服务已经过时了,无法使用,但是需要大量的转换等才能使其正常工作。 这取决于您将其添加到容器中时指定的组件的寿命。 如果生活方式是集中的,则可以使用Release()。这会将组件放回池中,以进行下一次检索(对象不会被销毁,因此处理会很糟糕) 如果生活方式是短暂的,则在获取组件时会创建一个新对象。在这种情况下,处置取决于您,您无需致电Release 如果生活方式是Thread,则每个线程都使用相同的组件,而不销毁。 如果生活方式为Singleton,则只会创建一个组件,并且不会破坏它。
您很可能正在使用瞬态组件? (如果您担心要及时处理它们)
编辑-是的,为了"刷新"或处理并重新创建您的单例,您需要销毁容器或编写自定义生命周期。进行自定义生命周期实际上并不那么困难,并且将这样做的逻辑保持在一个地方。
好吧,所以我一直在运行测试,并且似乎
现在,如果您调用
幸运的是,我有能力删除所有组件,并且可以相当轻松地还原它们。但是,这不是最佳的。 |
最新内容
相关内容
linux调用函数的命令?
linux调用函数的命令?,系统,代码,策略,上调,时间,设计,通信,网络,设备,项目,如何在Linux内核里增加一个系统调用?在一个进程中创建3个线程,名字linux外部命令调用?
linux外部命令调用?,系统,软件,标准,命令,盘中,管理,外部,进程,程序,内存,linux借用外部命令expr,实现计算器功能,利用管道,进程你得装一个callinux怎么调用命令行?
linux怎么调用命令行?,系统,地址,工具,工作,首页,终端,命令,密码,信息,情况,linux怎么打开命令行窗口1、在Linux系统中,打开命令行窗口需要使用linux上自己注册命令?
linux上自己注册命令?,系统,密码,工作,命令,文件,文件夹,新增,联系方式,状态,检测,LINUX中,创建文件夹、文件命令及清除命令。创建文件夹mkdir浏览器调用linux命令?
浏览器调用linux命令?,系统,信息,人工智能,软件,数据,首次,地址,代码,咨询,服务,求助大神,如何通过网页使用python向linux系统发送一些命令执py调用linux的命令?
py调用linux的命令?,系统,代码,状态,环境,标准,工具,命令,文件,脚本,终端,linux执行python脚本1、先将终端所在路径切换到python脚本文件的目浏览器调用linux命令?
浏览器调用linux命令?,系统,信息,人工智能,软件,数据,首次,地址,代码,咨询,服务,求助大神,如何通过网页使用python向linux系统发送一些命令执py调用linux的命令?
py调用linux的命令?,系统,代码,状态,环境,标准,工具,命令,文件,脚本,终端,linux执行python脚本1、先将终端所在路径切换到python脚本文件的目linux系统命令调用?
linux系统命令调用?,系统,单位,工具,工作,管理,地址,权威,密码,电脑,信息,怎么把linux系统的命令行打开在Linux系统中,打开命令行窗口需要使用linux调用上一条命令?
linux调用上一条命令?,系统,命令,一致,数字,名称,网上,电脑,目录,空格,终端,linux返回上一级的命令是什么?怎么写?首先在电脑中,打开linux系统linux命令行调用程序?
linux命令行调用程序?,工具,环境,代码,初级,工程,系统,网上,服务,管理,发行,linux下如何运行程序?1、,首先去运行perl-v命令查看您的linux系统linux使用命令的方法?
linux使用命令的方法?,系统,信息,工具,标准,数据,命令,左下角,目录,文件夹,图标,linux的cd命令的使用方法1、cd ~:回到用户家目录。注:这得看你