asp.net項目開發過程中用到了多個程式集(dll), 如何根據類型全名(fullname)獲取類型信息? 如果項目(csproj)中設置了引用對應的dll 或nupkg包,但是代碼中沒有任務地方引用改該程式集的類,則實際上運行時,該程式集不會被載入到進程中. 假設有一個 ThirdModels. ...
asp.net項目開發過程中用到了多個程式集(dll), 如何根據類型全名(fullname)獲取類型信息?
如果項目(csproj)中設置了引用對應的dll 或nupkg包,但是代碼中沒有任務地方引用改該程式集的類,則實際上運行時,該程式集不會被載入到進程中.
假設有一個 ThirdModels.dll, 在該dll中定義命名空間(namespace) ThirdModels, 該命名空間定義了類Person,即Person類的fullname為ThirdModels.Person . 在代碼中沒有任何地方直接引用ThirdModels.Person。
則如下代碼
var aseemblies = AppDomain.CurrentDomain.GetAssemblies()
assemblies中不會載入ThirdModels程式集。這種情況下,通過如下調用可以載入程式集到當前進程:
Assembly.Load(assemblyName)
如果代碼中由任何地方直接使用了Person類,則系統會自動載入ThirdModels.Person到當前程式集中。
現在給你兩個字元串,一個為"ThirdModels.Person", 另一個為從外部接收到的 Person 對象json序列化字元串.如何在你的程式中獲得一個Person對象?
代碼如下:
public static object? GetObjFromAssembly(string clsFullName, string instJson, string assemblyName) { var assembly = Assembly.Load(assemblyName); var type = AppDomain.CurrentDomain.GetAssemblies()?.SelectMany(x => x.DefinedTypes)?.ToHashSet() ?.FirstOrDefault(x => x.FullName == clsFullName); if (type is not null) { var obj = JsonSerializer.Deserialize(instJson, type!); return obj; } return null; }