2017-07-03 97 views
1

我的理解是注入的类不会被激活,直到调用其中一个构造函数(如我的MVC项目中的Controller)。但是,是否可以立即强制激活单例,所以我不必等待控制器被调用?我想我可以这样做:.NET核心依赖注入 - 强制立即激活

services.AddSingleton(new MySingleton()); 

但是如果MySingleton在它的构造函数中使用DI呢?有没有办法调用构造函数?我应该改变,而不是构造有作为的IServiceProvider参数,手动提取的依赖?:

_myDependency = serviceProvider.GetService<MyDependency>(); 

回答

1

比方说,我们这样一个类。

public class MySingleton { 
    private readonly IMyDependency dependency; 
    MySingleton(IMyDependency dependency) { 
     this.dependency = dependency; 
    } 
} 

如果我正确理解你的问题,你正在寻找这样的事情。

services.AddSingleton<IMyDependency, MyDependency>(); 
services.AddSingleton<MySingleton>(provider => new MySingleton(provider.GetService<IMyDependency>())); 

这会创建一个实现因子,用于在需要时初始化您的单例。在手动初始化类型时,它是一个重载提供程序服务提供程序。

例如,如果您需要在注册后访问您的单身人士。

var serviceProvider = services.BuildServiceProvider(); 

MySingleton singleton = serviceProvider.GetService<MySIngleton>();