ฉันใช้ระบบตัดไม้ของ Castle Windsor และใช้งานได้ดีมาก ฉันมีโปรแกรมติดตั้งที่ลงทะเบียน interceptor พร้อมสิ่งอำนวยความสะดวกในการเชื่อมต่อกับเหตุการณ์ต่างๆ เพื่อที่ฉันจะได้เก็บโค้ดส่วนใหญ่ของฉันไว้โดยไม่รู้ตัวทั้ง Castle และ log4net อย่างมีความสุข
การลงทะเบียนของฉันส่วนใหญ่เกิดขึ้นในโค้ด แต่สำหรับการบันทึก ฉันกำลังเชื่อมต่อมันใน web.config (ซึ่งจะติดตั้งก่อน) เช่นนี้
<castle>
<facilities>
<facility id="logging"
type="Castle.Facilities.Logging.LoggingFacility, Castle.Facilities.Logging" loggingApi="log4net" />
</facilities>
<installers>
<install type="MyProject.LoggerInstaller,MyProject" />
</installers>
</castle>
เหตุผลก็คือฉันไม่จำเป็นต้องรวมส่วนการกำหนดค่านี้เมื่อไปที่การใช้งานจริง นอกจากนี้ยังหมายความว่าฉันสามารถสลับจาก log4net เป็น nlog เป็นสิ่งอื่นที่เราต้องการได้ทันที และหมายความว่าไม่มีส่วนประกอบใดของฉันต้องอ้างอิง log4net โดยตรง
ปัญหาที่ฉันมีคือฉันต้องการใช้การบันทึกในระหว่างขั้นตอนการลงทะเบียน ฉันทำเช่นนี้เพราะการลงทะเบียนมีความซับซ้อนเล็กน้อย และฉันต้องการติดตามสิ่งที่เกิดขึ้นและใช้เวลานานเท่าใดได้อย่างง่ายดาย (ส่วนใหญ่เป็นเพราะฉันมีระบบประเภทปลั๊กอิน)
ใน LoggerInstaller ของฉัน ฉันกำลังพยายามแก้ไข ILoggerFactory เพื่อให้ฉันสามารถสร้างคนตัดไม้และเชื่อมโยงเหตุการณ์บางอย่างเข้ากับวัตถุยูทิลิตี้ของฉันได้ แต่สิ่งนี้ล้มเหลวด้วยสิ่งนี้:
ComponentNotFoundException: No component for supporting the service Castle.Core.Logging.ILoggerFactory was found
จากการขุดค้นรอบๆ แหล่งที่มาของ Castle ฉัน คิด ว่าตัวติดตั้งทั้งหมดได้รับการติดตั้งก่อนสิ่งอำนวยความสะดวกใด ๆ ดังนั้นจึงปรากฏว่าสิ่งอำนวยความสะดวกนั้นไม่ได้รับการเตรียมใช้งานภายในตัวติดตั้งของฉัน ถ้าฉันสร้างตัวติดตั้งตัวที่ 2 เพียงเพื่อเชื่อมต่อเหตุการณ์เพื่อไม่ให้เกิดขึ้นผ่านการกำหนดค่า XML มันก็ใช้งานได้ แต่ฉันต้องการให้บันทึกทุกอย่างเกี่ยวข้องกัน - และมันไม่สมเหตุสมผลเลยที่จะเชื่อมต่อเหตุการณ์หากการบันทึกไม่ได้ ไม่สามารถใช้ได้ (และฉันต้องรู้ก่อนว่าเปิดใช้งานการบันทึกหรือไม่..??)
ตามหลักการแล้ว ฉันต้องการลงทะเบียนสิ่งอำนวยความสะดวก Castle Logging จากผู้ติดตั้งของฉัน แต่ฉันไม่รู้วิธีสรุปองค์ประกอบที่กำหนดค่าได้ (หรือว่าฉันอยากทำ)
มีวิธีที่ง่ายกว่านี้ไหม? ฉันสงสัยว่าฉันไม่ได้ทำสิ่งที่ปกติแล้วเป็นความคิดที่ดี เพราะฉันรู้ว่าฉันไม่ควรแก้ไขปัญหาในขั้นตอนการลงทะเบียน แต่ฉันคิดว่าการติดตั้งนั้นซับซ้อนพอที่จะรับประกันการบันทึกเล็กน้อย
มีใครเคยทำเรื่องแบบนี้มาก่อนบ้างไหม? ความช่วยเหลือใดๆ (หรือการนำทางไปสู่เส้นทางที่ชอบธรรมกว่านี้!) จะได้รับการชื่นชมอย่างมาก