1 回答
TA贡献1856条经验 获得超5个赞
好的,我将回答我的想法。
我决定处理这个问题的方式是用空的界面IEagerSingleton标记自己运行的,未被其他服务使用的服务,而不用我用于其他服务的空泛型标记它们IService<T>。
这使我仍然能够获得在别处使用的所有服务的依赖项注入,同时能够热切初始化我想热切初始化的那些服务。下面的基本思想。
public interface ISingleton<T>
{}
public interface IEagerSingleton
{}
public class Singleton : IEagerSingleton
{
}
//In a startup method somewhere
var collection = new
ServiceCollection().AddSingletonsFromAssembly(typeof(IEagerSingleton));
collection.AddSingletonsFromAssembly(typeof(ISingleton<>));
var provider = collection.BuildServiceProvider();
provider.GetServices<IEagerSingleton>();
这样,我已经运行的注入仍然可以正常工作,现在依赖于来自ServiceProvider注入但未被其他任何服务使用的服务会得到急切的初始化。另外,它仍然可以轻松维护。如果其他服务之一最终在以后需要其中一个独立服务,那么我可以简单地将服务继承的接口交换为ISingleton<T>。
- 1 回答
- 0 关注
- 328 浏览
添加回答
举报