มีวิธีแก้ไขด้วยสองโครงการ ฉันประสบปัญหา DI โซลูชันประกอบด้วยไลบรารีคลาสและแอป WebApi2 (ซึ่งใช้ไลบรารีคลาสและเปิดเผย API)
ฉันได้กำหนด Autofac.module ในไลบรารีคลาสซึ่งตั้งค่า DI ทั้งหมดในโครงการ
ในโครงการ WebApi2 ฉันสร้างคอนเทนเนอร์ DI (โดยใช้ Autofac.WebApi2) และโหลดโมดูลจากไลบรารีคลาส ตอนนี้เมื่อตัวควบคุม api ในโปรเจ็กต์ WepApi2 ร้องขอบริการในคลาสไลบรารีที่พวกเขาสร้างขึ้นโดยมีการขึ้นต่อกันทั้งหมด ทั้งหมดนี้ใช้งานได้ดี!
ปัญหาคือตอนนี้ฉันอยู่ในไลบรารีคลาสจำเป็นต้องสร้างอินสแตนซ์บางคลาสจากสตริง (ซึ่งในที่สุดก็มาจาก DB) เท่าที่ฉันรู้วิธีเดียวที่จะทำสิ่งนี้ได้โดยใช้การสะท้อนกลับ ดังนั้นฉันจึงทำสิ่งนี้:
var ruleType = Type.GetType(rule.RuleImplementation.Implementation);
var rule = (IRule)Activator.CreateInstance(ruleType,param1,param2);
ปัญหาคือคลาสที่ใช้อินเทอร์เฟซ IRule มีการขึ้นต่อกันซึ่งจำเป็นต้องได้รับการแก้ไข และนี่คือสิ่งที่ทำให้ฉันต้องต่อสู้กับคีย์บอร์ดมาระยะหนึ่งแล้ว
เป็นไปได้ไหมที่จะใช้การสะท้อนกลับและ autoFac ร่วมกันเพื่อสร้างอินสแตนซ์ของวัตถุ ฉันยังต้องสามารถส่งพารามิเตอร์ของฉันไปยังวัตถุได้เช่นกัน
... หรือมีวิธีการเข้าถึงคอนเทนเนอร์ (ซึ่งสร้างขึ้นในชุดประกอบ webApi2) และใช้สิ่งนั้นเพื่อแก้ไขหรือไม่ ฉันเดาว่านี่จะเป็นรูปแบบการบริการบางอย่างที่ฉันเชื่อว่าถือเป็นรูปแบบการต่อต้าน
ฉันจะดำเนินการต่อได้อย่างไร? ข้อมูลทั้งหมดได้รับการชื่นชมอย่างมาก