C # /. NET Dependency Injection Framework ใดที่ควรพิจารณา? และสิ่งที่คุณสามารถพูดเกี่ยวกับความซับซ้อนและความเร็วของพวกเขา
C # /. NET Dependency Injection Framework ใดที่ควรพิจารณา? และสิ่งที่คุณสามารถพูดเกี่ยวกับความซับซ้อนและความเร็วของพวกเขา
คำตอบ:
แก้ไข (ไม่ใช่โดยผู้เขียน): มีรายการที่ครอบคลุมของกรอบ IoC ที่https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc :
คำตอบเดิมมีดังนี้
ฉันคิดว่าฉันอาจจะจู้จี้จุกจิกที่นี่ แต่สิ่งสำคัญที่ควรทราบคือ DI (Dependency Injection) เป็นรูปแบบการเขียนโปรแกรมและอำนวยความสะดวกโดย แต่ไม่ต้องการกรอบ IoC (Inversion of Control) กรอบ IoC เพียงทำให้ DI ง่ายขึ้นและพวกเขาก็ให้ผลประโยชน์อื่น ๆ เป็นจำนวนมากกว่า DI
ที่ถูกกล่าวว่าฉันแน่ใจว่านั่นคือสิ่งที่คุณถาม เกี่ยวกับ IoC Frameworks; ฉันเคยใช้Spring.NetและCastleWindsor บ่อยครั้ง แต่ความเจ็บปวดที่แท้จริงในเบื้องหลังคือสิ่งที่ XML ที่น่ารำคาญที่คุณต้องเขียน! ตอนนี้พวกเขากำลังเคลื่อนไหวด้วยวิธีนี้ดังนั้นฉันจึงใช้StructureMapในปีที่แล้วหรือมากกว่านั้นและเนื่องจากมันได้ย้ายไปยังการตั้งค่าที่คล่องแคล่วโดยใช้ตัวพิมพ์ทั่วไปที่แข็งแกร่งและรีจิสทรีสิ่งกีดขวางความเจ็บปวดในการใช้ IoC ได้ลดลง ต่ำกว่าศูนย์! ฉันได้รับรู้ว่าการกำหนดค่า IoC ของฉันได้รับการรวบรวมในเวลารวบรวม (ส่วนใหญ่) และฉันไม่มีอะไรนอกจากความสุขจากโครงสร้างของแผนที่และความเร็ว ฉันจะไม่พูดว่าคนอื่นช้าในรันไทม์ แต่พวกเขายากสำหรับฉันที่จะติดตั้งและความยุ่งยากมักจะชนะในวันนั้น
ปรับปรุง
ฉันใช้Ninjectกับโปรเจ็กต์ล่าสุดของฉันและรู้สึกยินดีอย่างยิ่งที่ได้ใช้ คำพูดทำให้ฉันผิดหวังเล็กน้อยที่นี่ แต่ (อย่างที่เราพูดกันในสหราชอาณาจักร) กรอบงานนี้คือ 'สุนัข' ฉันขอแนะนำเป็นอย่างยิ่งสำหรับโครงการเขตข้อมูลสีเขียวที่คุณต้องการเปิดใช้งานและทำงานได้อย่างรวดเร็ว ฉันได้รับทั้งหมดที่ฉันต้องการจากชุดมหัศจรรย์ของ Ninject screencastsโดย Justin Etheredge ฉันไม่เห็น Ninject ที่ปรับให้พอดีกับ retro เป็นรหัสที่มีอยู่เป็นปัญหาเลย แต่จากนั้นอาจกล่าวได้เหมือนกันว่าStructureMapในประสบการณ์ของฉัน มันจะเป็นตัวเลือกที่ยากลำบากในการก้าวไปข้างหน้าระหว่างสองสิ่งนี้ แต่ฉันอยากจะมีการแข่งขันมากกว่าความซบเซาและมีการแข่งขันที่ดีต่อสุขภาพ
screencasts IoC อื่น ๆ ยังสามารถพบได้ที่นี่ใน Dimecasts
ขึ้นอยู่กับสิ่งที่คุณต้องการเพราะแต่ละคนมีข้อดีและข้อเสีย
Spring.NET
เป็นผู้ใหญ่ที่สุดเมื่อออกจาก Spring จากโลก Java Spring มีไลบรารีเฟรมเวิร์กมากมายที่ขยายให้รองรับเว็บ, Windows และอื่น ๆCastle Windsor
เป็นหนึ่งในที่สุดที่ใช้กันอย่างแพร่หลายในแพลตฟอร์ม. NET และมีระบบนิเวศที่ใหญ่ที่สุดมีการกำหนดค่าสูง / ขยายได้มีการจัดการอายุการใช้งานที่กำหนดเองการสนับสนุน AOP ได้รับการสนับสนุน NHibernate โดยธรรมชาติและเป็นภาชนะที่น่ากลัว วินด์เซอร์เป็นส่วนหนึ่งของกองทั้งหมดซึ่งรวมถึงโมโนเรล, Active Record, ฯลฯ NHibernate สร้างขึ้นบนวินด์เซอร์Structure Map
มีการกำหนดค่าที่หลากหลายและละเอียดมากผ่าน DSL ภายในAutofac
เป็นคอนเทนเนอร์ IoC ของยุคใหม่ที่มีการสนับสนุนการเขียนโปรแกรมการทำงานโดยธรรมชาติทั้งหมด นอกจากนี้ยังใช้แนวทางที่แตกต่างในการจัดการอายุการใช้งานกว่าวิธีอื่น Autofac ยังคงเป็นสิ่งใหม่มาก แต่มันก็ผลักดันบาร์ในสิ่งที่เป็นไปได้ด้วย IoCNinject
ฉันเคยได้ยินก็คือกระดูกที่เปลือยเปล่ามากขึ้นเมื่อมีความพยายามน้อยUnity
คือ: มาจากและสนับสนุนโดย Microsoft (p & p) ความสามัคคีมีประสิทธิภาพที่ดีมากและมีเอกสารที่ยอดเยี่ยม นอกจากนี้ยังสามารถกำหนดค่าได้อย่างมาก มันไม่มีเสียงระฆังและเสียงทั้งหมดของแผนที่ปราสาท / โครงสร้างโดยสรุปแล้วมันขึ้นอยู่กับสิ่งที่สำคัญกับคุณ ฉันจะเห็นด้วยกับคนอื่น ๆ ในการไปและประเมินและดูว่าอันไหนเหมาะ สิ่งที่ดีคือคุณมีโดนัทให้เลือกมากกว่าแค่ต้องมีเยลลี่
Autofac https://github.com/autofac/Autofacมันเร็วและดีจริงๆ นี่คือลิงค์ที่มีการเปรียบเทียบ (ทำหลังจาก Ninject แก้ไขปัญหาการรั่วไหลของหน่วยความจำ)
http://www.codinginstinct.com/2008/05/ioc-container-benchmark-rerevisted.html
Ninject นั้นยอดเยี่ยม ดูเหมือนว่าจะเร็วมาก แต่ฉันไม่ได้ทำการเปรียบเทียบใด ๆ ฉันรู้ว่า Nate ผู้เขียนทำการเปรียบเทียบระหว่าง Ninject กับกรอบ DI อื่น ๆ และกำลังมองหาวิธีเพิ่มเติมเพื่อปรับปรุงความเร็วของ Ninject
ฉันได้ยินผู้คนมากมายที่ฉันเคารพพูดสิ่งดีๆเกี่ยวกับ StructureMap และ CastleWindsor ในความคิดของฉันมีสามคนที่จะต้องดู
ฉันใช้Simple Injector :
Simple Injector เป็นไลบรารีการฉีดที่พึ่งพาง่ายและรวดเร็วซึ่งใช้แนวทางปฏิบัติที่ดีที่สุดเพื่อเป็นแนวทางในการแก้ปัญหาของคุณสู่ความสำเร็จ
ฉันเป็นแฟนตัวยงของปราสาท ฉันชอบสิ่งอำนวยความสะดวกที่มีให้นอกเหนือจากเรื่องราว IoC Container มันง่ายมากที่ใช้ NHibernate, การบันทึก, AOP และอื่น ๆ ฉันยังใช้Binsorสำหรับการกำหนดค่าด้วย Boo และตกหลุมรัก Boo เป็นภาษาเพราะมันเป็นเช่นนั้น
ฉันสามารถแนะนำ Ninject มันเหลือเชื่อใช้งานง่ายและรวดเร็ว แต่ถ้าคุณไม่ต้องการการกำหนดค่า XML มิฉะนั้นคุณควรใช้วินด์เซอร์
ฉันใช้เวลาส่วนที่ดีกว่าของวันที่ต้องดิ้นรนไม่ประสบความสำเร็จเพื่อให้ตัวอย่าง Spring.NET ที่ง่ายที่สุดทำงานได้ ไม่สามารถหาวิธีหาชุดประกอบของฉันจากไฟล์ XML ได้ ในอีกประมาณ 2 ชั่วโมงฉันก็สามารถใช้งาน Ninject ได้รวมถึงการทดสอบการรวมกับ NUnit และ MSTest
ฉันเคยใช้Spring.NETมาก่อนและประสบความสำเร็จอย่างมาก ฉันไม่เคยสังเกตเห็นค่าใช้จ่ายที่เป็นกอบเป็นกำ แต่โครงการที่เราใช้มันค่อนข้างหนักในตัวของมันเอง ใช้เวลาเพียงเล็กน้อยในการอ่านเอกสารเพื่อติดตั้ง
สิ่งที่ยอดเยี่ยมเกี่ยวกับ C # คือการติดตามเส้นทางที่ถูกตีโดยนักพัฒนา Java เป็นเวลาหลายปีก่อนหน้านี้ ดังนั้นคำแนะนำของฉันโดยทั่วไปเมื่อพูดถึงการมองหาเครื่องมือในลักษณะนี้คือการหาคำตอบที่มั่นคงของ Java และดูว่ามีการดัดแปลง. NET หรือไม่
ดังนั้นเมื่อมันมาถึงการ DI (และมีตัวเลือกมากมายออกมีนี้จริงๆเป็นเรื่องของรสชาติ) เป็นSpring.NET นอกจากนี้ยังเป็นการฉลาดที่จะทำการวิจัยผู้คนที่อยู่เบื้องหลังโครงการ ฉันไม่มีปัญหาในการแนะนำผลิตภัณฑ์ SourceGear สำหรับการควบคุมแหล่งที่มา (นอกการใช้งาน) เพราะฉันนับถือ Eric Sink ฉันเคยเห็นมาร์คพอลแล็คพูดแล้วฉันจะพูดยังไงดี
ในท้ายที่สุดมีกรอบ DI จำนวนมากและทางออกที่ดีที่สุดของคุณคือการทำตัวอย่างโครงการที่มีไม่กี่โครงการและเลือกการศึกษา
โชคดี!
ฉันคิดว่าจุดเริ่มต้นที่ดีคือ Ninject เป็นเรื่องใหม่และคำนึงถึงการปรับจูนอย่างรวดเร็วและเร็วมาก เนทนักพัฒนามีเว็บไซต์ที่ยอดเยี่ยมและการสนับสนุนที่ยอดเยี่ยม
Spring.Net ค่อนข้างแข็งแกร่ง แต่เอกสารใช้เวลาพอสมควรในการลุย Autofac นั้นดีและในขณะที่รองรับ. Net 2.0 คุณต้องใช้ VS 2008 เพื่อคอมไพล์หรือใช้บรรทัดคำสั่งเพื่อสร้างแอปของคุณ