第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

創(chuàng)建實(shí)例并解決依賴關(guān)系

創(chuàng)建實(shí)例并解決依賴關(guān)系

C#
藍(lán)山帝景 2022-01-15 19:25:26
我有在主項(xiàng)目中引用的 c# 庫。圖書館獲取主項(xiàng)目程序集;System.Reflection使用;檢索所有類型應(yīng)該使用創(chuàng)建類型Activator.CreateInstance(我不確定這是最好的方法)。該庫對主項(xiàng)目一無所知,只有一個(gè)可以通過反射獲得的元數(shù)據(jù)。如何解決依賴關(guān)系?private readonly Assembly _assembly;public Injector(){    _assembly = Assembly.GetEntryAssembly();}public List<string> GetTypes(){    return _assembly        .GetTypes()        .Select(x => x.FullName)        .ToList();}public object GetType(string typeName){    Type type = _assembly        .GetTypes()        .First(x => x.FullName == typeName);    object instance = Activator.CreateInstance(type);    return instance;}可能的問題:不同的 IoC 容器(第三方庫,自己編寫的)。在不強(qiáng)制用戶提供大量設(shè)置的情況下,處理此問題并使庫更加自動化的最佳方法是什么?如果不可能,您能否提供任何其他解決方案?謝謝。編輯:如何提供對實(shí)例的依賴關(guān)系A(chǔ)ctivator.CreateInstance或直接從主(源)項(xiàng)目創(chuàng)建實(shí)例?應(yīng)該允許創(chuàng)建包含在主項(xiàng)目中的任何實(shí)例。是的,主項(xiàng)目也對圖書館一無所知。因此,希望在主項(xiàng)目中進(jìn)行最少的代碼更改。編輯 2:該庫不會在源項(xiàng)目中使用,它將有自己的 UI 界面。例如,Swagger API
查看完整描述

1 回答

?
胡說叔叔

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊

只要解析的庫在同一文件夾下(或在 GAC 中),依賴關(guān)系就會自動解析 如果庫在特定文件夾下,自動解析可能會失敗,但您可以使用AppDomain.AssemblyResolve事件處理它。


此外,您似乎正在嘗試實(shí)現(xiàn)一種插件/插件主機(jī),也許您可以嘗試使用托管可擴(kuò)展性框架而不是通過反射手動實(shí)現(xiàn)解決方案。


編輯:遵循事件使用的代碼片段,但需要根據(jù)您的環(huán)境進(jìn)行調(diào)整


static Injector()

{

     // Usage of static constructor because we need a unique static handler

     // But feel free to move this part to a more global location

     AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;

}


private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)

{

  string foundAssemblyPath = string.Empty;


  // args.Name contains name of the missing assembly

  // some project-specific and environment-specific code should be added here to manually resolve the dependant library

  // In this example I will consider that the libraries are located under /plugins folder

  foundAssemblyPath = $@"{Path.GetDirectoryName(Application.StartupPath)}\plugins\{args.Name}.dll";


  return Assembly.LoadFile(foundAssemblyPath);

}


查看完整回答
反對 回復(fù) 2022-01-15
  • 1 回答
  • 0 關(guān)注
  • 161 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號