وبلاگ شخصی حامد شیربندی

حامد شیربندی

توسعه دهنده نرم افزار

نحوه ی reuse کردن view ها و کنترلر ها در ASP.NET Core

زمانی که نیاز دارید تا بخشی از یک برنامه شامل یک سری controller و view را reuse کنید به گونه ای که در سایر برنامه ها فقط dll های مربوط به آن را رفرنس کنید کافی ست تا یک پروژه ی مجزا از نوع RazorClassLibrary ایجاد کنید که در net core 2.1 اضافه شده است. سپس میتوانید کنترلر ها و view های مربوطه را در آن پیاده سازی کنید. در این صورت با بیلد گرفتن از برنامه یک dll با نام خود پروژه و یک dll هم برای نگهداری view ها به صورت زیر ایجاد خواهد شد :

MyReuseProject.dll
MyReuseProject.Views.dll

حال کافی است این dll ها را در دیگر برنامه ها رفرنس کنید.اما با اجرای آن برنامه با یک خطا مواجه خواهید شد که اشاره به عدم وجود کنترلر و ویوی مورد نظر خواهد داشت. برای رفع این مشکل باید به آن برنامه اعلام کنیم که باید کنترلر و ویو های داخل dll های رفرنس شده را نیز لاود کرده و عملیات جستجوی کنترلر و ویو را داخل آن ها نیز انجام دهد. برای انجام اینکار کافی ست در کلاس Startup برنامه به صورت زیر عمل کنیم :




 
 public IServiceProvider ConfigureServices(IServiceCollection services)
 {
 var mvcBuilder = services.AddMvc();

 ConfigurePlugin(mvcBuilder.PartManager);
 }



 private static void ConfigurePlugin(ApplicationPartManager applicationPartManager)
 {
 var pluginAssembly = typeof(MyReuseController).Assembly;
 var partFactory = ApplicationPartFactory.GetApplicationPartFactory(pluginAssembly);

 foreach (var part in partFactory.GetApplicationParts(pluginAssembly))
 {
 applicationPartManager.ApplicationParts.Add(part);
 }

 var relatedAssemblies = RelatedAssemblyAttribute.GetRelatedAssemblies(pluginAssembly, throwOnError: true);
 foreach (var assembly in relatedAssemblies)
 {
 partFactory = ApplicationPartFactory.GetApplicationPartFactory(assembly);
 foreach (var part in partFactory.GetApplicationParts(assembly))
 {
 applicationPartManager.ApplicationParts.Add(part);
 }
 }
 }





نوشته شده توسط حامد شیربندی

اگر در مورد این نوشته سوال یا ابهامی وجود دارد میتوانید به ایمیل من ارسال کنید. البته در این مورد باید کمی صبور باشید. در آینده بخش نظرات اضافه خواهد شد.