2017-07-03 69 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>();