lwl1569  

众所周知,AddTransient是对实例是用完就销毁的,每次使用的时候都需要重新实例调用,AddSingleton是全程只有一个实例,不销毁的,随时可以调用,不用重新实例化。
这首先出现一个问题:寿命问题,当出现多个service的时候,一个是AddTransient,一个是AddSingleton的情况下,在singleton中是不可以调用AddTransient的服务的,否则会报错:
Cannot consume scoped service '' from singleton ''
相反却可以,我想理解起来也很容易理解。
这就延伸出了另一个问题,回调函数怎么使用依赖注入的问题,回调函数如果是使用静态方法的方式定义的,那自然没有问题,如果想使用DI的方式,那方法自然必须是一般方法。
如果回调方法仅仅在主方法实例化的同时使用一次,依赖注入可以伴随主方法实例化后的依赖注入的内容一起使用,也没有问题。
如果用的订阅,主方法实例后,AddTransient的服务伴随主方法实例同时实例了一个服务,服务伴随主方法停止也被销毁,回调方法在主方法停止后依然在运行,此时没有了AddTransient的服务,回调方法中就无法使用该服务,便会报错:
Cannot access a disposed context instance. A common cause of this error is disposing a context instance that was resolved from dependency injection and then later trying to use the same context instance elsewhere in your application. This may occur if you are calling 'Dispose' on the context instance, or wrapping it in a using statement. If you are using dependency injection, you should let the dependency injection container take care of disposing context instances.

posted on 2021-11-13 14:09  lwl1569  阅读(509)  评论(0编辑  收藏  举报