簡體   English   中英

泛型類的動態依賴注入

[英]Dynamic dependency injection of a generic class

我是 .Net 世界的新手,我遇到了一個找不到解決方案的問題,我希望你能幫我解決這個問題。

我有一個實現通用接口的通用類,當我實現依賴注入時,我不知道如何使它成為動態的。

例如:

services.AddSingleton<IGenericRepository<Game>, GenericRepository<Game>>();

我有多個類要傳遞給通用類/接口(游戲就是其中之一),我知道我必須為每個類重復這一行,但我想知道有什么方法可以做到這一點動態的。

謝謝你。

您正在尋找的稱為“開放通用”注冊。 您沒有確切說明您使用的是什么 DI 框架,但對於大多數 DI 框架,語法類似於:

services.AddSingleton(typeof(IGenericRepository<>), typeof(GenericRepository<>));

我的猜測是您正在使用 Microsoft DI 框架。 如果是這樣,相關文檔在這里 搜索“通用”一詞。

如果它們都在同一個命名空間中,您可能可以使用反射來加載所有模型類型。 就像是:

// You can use Assembly.GetExecutingAssembly() if the models are in the same assembly this code runs from
var assembly = typeof(SomeTypeInAssembly).Assembly;

var modelTypes = assembly.GetTypes()
    .Where(t => t.IsClass && t.Namespace == "Namespace.For.Your.Models");

foreach (var modelType in modelTypes)
{
    services.AddScoped<IGenericRepository<modelType>, GenericRepository<modelType>>();
}

其中SomeTypeInAssembly是模型所在的同一程序SomeTypeInAssembly的類型, "Namespace.For.Your.Models"是模型所在的完整命名空間。

暫無
暫無

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

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