روش بهتر !
ترجیح میدم سوالتون و با پروژهای مشابهی که کار کردم جواب بدم
چند سال قبل بر روی سیستمی کار میکردیم که قرار بود با توجه به درخواست کاربر دامنه ای رو یک Registerrer خاص ثبت، تمدید، منتقل، حذف و ... کنه
چون قرار بود سیستم با امکانات اولیه فروخته بشه و در صورت خرید پلاگین ها، بقیه امکانات اضافه بشه،
این قسمت به این صورت کار شده بود که در زمان انجام هر عملی لیست Registerrer ها میاومد که هر کدومشون توسط پلاگینشوننصب شده بودند و میتونستن کارهای ذکر شدرو انجام بدن
برای پیاده سازی چنین قابلیتی یک interface کلی وجود داشت که وظایف کلی Registerrer ها رو مشخص میکرد
بعد هر پلاگینی که اضافه میشد میدونستیم چه کارهایی میتونه انجام بده و بعدش با رفلکشن و cast کردن کلاس اصلی هر پلاگین به interface ، به متدهای مورد نظر دسترسی داشتیم .
خوب تا اینجا شاید واقعا به یک سیستم pluggable نرسیدیم که شاید بگیم عیب دات نته
اجازه بدید یه مثال از php بزنم
یه پروژه php برای pluggable شدن فقط نیاز داره تا یکسری فایل .php رو در مسیر خاصی در روت اصلی قرار بدیم و ادرسشون و فراخوانی کنیم . کار تمومه و به سیستم pluggable رسیدیم
که برای کامل شدن این مثال بهتره که pluginها به صورت فایل zip نصب بشن که در نهایت همون کپی کردن فایلهای .php در جاهای مختلف پروژه میتونه باشه
اما تو دات نت یه خورده این کار سخت هست
پروژه ای که در حال حاضر کار میکنم تقریبا یه سیستم pluggableکامل هست البته از دید من
به این صورته که هر برنامه نویسی برای سیستمش سه پروژه
UI
Common
Business داره
به عنوان مثال
Accounting.UI
Accounting.Common
Accounting.Business
و پروژه ای دیگر
Store.UI
Store.Common
Store.Business
و ....
که تمام resourceها embeded میشن که با build کردن در فایلهای dll ذخیره میشن
در اجرای اولیه ، کل UI هایی که resource ی به صورت embeded دارن لیست میشن و در زمان درخواست هر صفحه از virtualPathProvider استفاده میکنم تا بتونم اون resource و از dll مربوطه بخونم و به کاربر نمایش بدم
در ادامه هر پروژه میتونه ساختار یکسانی برای تعریف منوهایی داشته باشه که قراره به منوی اصلی اضافه بشن.
که در چنین پروژه ای باید یکسری قوانین رو برای ساختار پروژهها برای برنامه نویسها مشخص کنید که طبق اونها پیش برن.
کار تمومه
حالا هر چندتا پروژهی مشابه با ساختار مشخص شده به پوشهی bin اضافه بشن، میتونن یه plug in باشن که به سیستم اضافه میشن