簡體   English   中英

外部類的依賴注入,構造函數 arguments 為 singleton

[英]Dependency injection for external classes with constructor arguments as singleton

我是 .net 核心中依賴注入的新手。 到目前為止,我使用的是接口,並且很容易通過 DI 框架注入依賴項。

現在,我有一個外部庫,它擁有 mongo DB 連接並提供必要的數據庫操作調用。

class 接受兩個參數,即連接字符串和數據庫名稱。 由於 MOQ 可以在沒有接口的情況下注入依賴項,所以我嘗試添加以下代碼

services.AddSingleton<MongoManager>();

由於MongoManager Class 接受連接字符串,因此這不起作用。 在此之后嘗試了下面的代碼。

services.AddSingleton(new MongoManager(userName, database));

上面的代碼按預期工作,但是它在應用程序啟動時創建 object。 在其他情況下,.net 框架在第一次請求時提供了 class 的實例,但是在這里它是在沒有任何地方的應用程序詢問的情況下創建的。 當應用程序終止時,這個 object 也會被處理嗎? 當實例第一次請求時,是否有任何方法可以注冊類並告訴框架將某些 arguments(如連接字符串、數據庫名稱等)傳遞給 class。

您可以使用services.AddTransientservice.AddScoped控制 scope。

當應用程序終止時,所有的都將被處理掉。

對不起,我誤解了你的問題,你可以像這樣將參數傳遞給方法。

services.AddSingleton(x => new MongoManager(param1, param2));

Singleton 生命周期服務 (AddSingleton) 在第一次被請求時創建(或者在 Startup.ConfigureServices 運行並使用服務注冊指定實例時)。

在處理請求的應用程序中,singleton 服務會在應用程序關閉時釋放 ServiceProvider 時釋放。

參考: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-3.1#singleton

有一個接受Func<IServiceProvider, TService>重載,它只會在第一次需要時實例化 singleton:

services.AddSingleton(_ => new MongoManager(userName, database));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM