ในแอปพลิเคชัน Xamarin iOS ฉันสามารถระบุการใช้งาน HttpClient ที่จะใช้ในรันไทม์ได้:
https://developer.xamarin.com/guides/cross-platform/macios/http-stack/
อย่างไรก็ตาม การตั้งค่านี้มีผลกับ HttpClients ที่สร้างโดยใช้ ctor เริ่มต้นเท่านั้น:
var client = new HttpClient()
แต่ถ้าฉันต้องการเพิ่มการสกัดกั้นคำขอไปยังไคลเอนต์ http ของฉันโดยการจัดหา DelegatingHandler แบบกำหนดเองให้กับ ctor ฉันจะใช้ ctor อื่น:
var myDel = new MyDel(RUNTIME_HANDLER_GOES_HERE);
var client = new HttpClient(myDel);
ตามหลักการแล้วในรันไทม์ ฉันจำเป็นต้องรู้ว่า httpHandler ใดถูกเลือกในการตั้งค่าโปรเจ็กต์เวลาคอมไพล์ เพื่อให้ myDel ล้อมมันในรันไทม์ ฉันต้องทำอย่างไร?
UPD ฉันสามารถค้นหาโค้ดที่รับผิดชอบในการเลือกตัวจัดการที่เหมาะสมในแหล่งที่มาของโมโน: https://github.com/mono/mono/blob/master/mcs/class/System.Net.Http/HttpClientEx.cs#L28 ก> อย่างไรก็ตาม คลาส RuntimeOptions เป็นแบบภายใน และฉันสามารถใช้ได้ผ่านการสะท้อนกลับในรันไทม์เท่านั้น ในกรณีนี้ อย่างไรก็ตาม ตัวเชื่อมโยงของ Xamarin จะดึง RuntimeOptions จาก dll ในโหมด release และแอปขัดข้องใน release และ adhoc builds แต่ไม่ได้อยู่ใน debug ไม่มีใครรู้ว่าจะเกิดอะไรขึ้นกับ RuntimeOptions ในบิลด์ xamarin ที่เปิดใช้งาน linker ดังนั้นฉันจึงสามารถใช้มันเพื่อค้นหา httphandler รันไทม์ได้