Saya sedang dalam tahap perencanaan untuk sistem intranet karyawan yang akan dibangun dengan ASP.NET MVC 4. Kami ingin situs terdiri dari "modul" yang terpisah, yang masing-masing menyediakan fitur yang berbeda: pesan, perubahan penggajian, dll. Saya ingin modul ini dapat diaktifkan atau dinonaktifkan pada waktu kompilasi. Beranda akan menampilkan semacam navigasi yang akan ditautkan ke setiap modul yang dimuat.
Sejauh ini mudah, tetapi saya tidak ingin fitur navigasi harus tahu tentang modul sebelumnya. Dengan kata lain, saya ingin modul dapat ditemukan secara dinamis; Saya ingin dapat menulis kode untuk modul baru dan kemudian memiliki tautan yang ditambahkan ke bilah navigasi tanpa ada perubahan kode di tempat lain di sumber. Setiap modul harus memiliki beberapa cara untuk mendaftarkan diri dengan bilah navigasi, dan - yang lebih penting - ini harus dilakukan untuk setiap modul saat dimuat.
Saya percaya bahwa ini menghalangi penggunaan Area MVC, karena itu dirancang untuk kasus ketika tata letak situs diketahui sebelumnya. MEF sepertinya mungkin tepat, meskipun orang tampaknya memiliki keberhasilan yang beragam dalam menggabungkan MEF dengan MVC. Apakah MEF sebenarnya cara untuk pergi ke sini, atau apakah ada cara yang lebih baik untuk mencapai apa yang saya butuhkan?
sumber
Jawaban:
Pertama-tama saya akan memiliki kelas terpusat yang digunakan untuk aplikasi untuk mendaftarkan modul yang dikompilasi dengan konstruktor statis dan Daftar anggota statis modul yang ada di sistem. Modul akan memiliki properti statis yang menunjukkan apakah item menu atau tidak dan urutan apa yang akan muncul di menu.
Setiap modul akan memiliki konstruktor statis sendiri yang akan mencatat sendiri di kelas terpusat yang melacak modul.
Pikirkan sistem ini lebih seperti sistem jam waktu di mana karyawan masuk dan jam masuk. Kemudian pada waktu penggajian, kita tahu untuk membayar semua karyawan berdasarkan siapa yang masuk, dll.
Refleksi juga dapat digunakan jika Anda memiliki kontrak antarmuka pada modul yang harus mereka warisi dari yang menghubungkan info properti meta dengan modul tersebut.
Saya bekerja untuk Warner Brothers Music dan melakukan sistem pemrosesan musik internal untuk berbagai format penyandian. Saya membuat model plugin generik untuk pengkodean dengan refleksi yang menggunakan pewarisan sehingga bisa menjadi typecast dengan refleksi untuk mendapatkan properti meta dasar kelas. Saya belum mencoba menggunakan kelas terpusat statis. Hanya memikirkan itu secara acak sebagai cara lain untuk mencoba bersenang-senang.
Saya juga akan menambahkan bahwa saya telah menggunakan MVC yang melayani banyak klien dengan persyaratan awal tetapi juga dengan fitur yang ditingkatkan mirip dengan apa yang Anda coba lakukan. Sebaliknya saya mengkonversi MVC menjadi menggunakan App_Code daripada membutuhkan kompilasi. Lebih mudah mendorong file keluar dengan cara ini tanpa perlu kompilasi terpusat.
Anda dapat memanfaatkan JIT dengan dorongan FTP atau GIT sederhana daripada harus mengkompilasi secara lokal dan mendorong DLL.
Berikut ini tautan ke artikel tersebut pada stack overflow
sumber
Anda mungkin ingin melihat menggunakan MEF dengan MVC. Ini akan memberi Anda kemampuan untuk Tambah - Take Away sesuai kebutuhan tanpa mengkompilasi ulang atau menggunakan. Seperti biasa, Scott adalah tempat yang baik untuk memulai: http://www.hanselman.com/blog/ExtendingNerdDinnerAddingMEFAndPluginsToASPNETMVC.aspx
sumber