【发布时间】:2019-02-24 23:52:12
【问题描述】:
我正在使用Microsoft.Extensions.DependencyInjection(默认实现)。我注意到,当我将对象添加为单例时,ServiceProvider 会忽略对象上的 IDisposable。
var instance = new MyDisposableObj();
ServiceLocator.Instance = instance;
var services = new ServiceCollection();
services.AddSingleton( instance );
var container = services.BuildServiceProvider();
container.Dispose();
看起来微软认为我必须手动处理手动创建的对象。
但是,当我为 ServiceCollection 进行扩展时,我想封装我的对象的处置。我不应该强迫我的扩展的用户手动处理我的对象!
那么,是否有可能改变这种行为?
【问题讨论】:
-
改变什么行为?您希望什么时候处理该对象?
-
处置其他人的单身将是一个很好的拖钓:)...通常,如果它是真正的单身,如果不重新启动应用程序,就不可能将其恢复到“未处置状态” - 所以我我不确定为什么您希望容器在这种情况下拥有所有权(特别是如果您可以创建多个容器)
-
顺便说一句,“看起来微软认为我必须手动处理手动创建的对象”一次性对象应始终由具有 (last) 的代码处理他们的所有权(不受规则约束)。我在这里感觉到对 IDisposables 的根本误解吗?
-
@Alexei Levenkov 这是我的对象。我创建它并添加到 ServiceCollection。
-
我应该手动创建
ServiceDescriptor吗?
标签: c# .net dependency-injection .net-core