使用控制反转最理想的状态是,热插拔。
通俗解释:当一个service要更新了,丢一个新的dll到bin下,ioc配置中把新的程序集中的实现类的实例映射到当前service的抽象,报错该配置。网站不需要重启,下一个用户使用的时候,直接调用了新的服务实现。对client来讲,服务器没有任何暂停服务的迹象。
如果真要做到这样子,有一点损耗要考虑这样值不值得,service的实例不能是单例模式。如果是单例模式就需要重新初始化,才能生效新的实现。如果要用单例又要使其静默生效,那么有两种方法,第一重启网站(非期望)。第二公开一个服务,让其重新初始化服务实例(这样把影响降低到最小)。
要么就不使用单例,不使用单例每天n次初始化服务实例,影响有多大?还是不要这样。