powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET MVC 4 with MEF 2
2 сообщений из 2, страница 1 из 1
ASP.NET MVC 4 with MEF 2
    #38287247
Фотография yardie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, начал учиться работать с MEF 2 на примере ASP.NET MVC 4 проекта. Задумка была сделать один главный проект и штамповать к нему проекты плагинов, его расширяющих(сборок).
В главном проекте, который должен запускать в себе плагины я создал класс для создания экземпляра контроллера
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
public class MefControllerFactory : IControllerFactory
	{
		private string pluginPath;
		private DirectoryCatalog catalog;
		private CompositionContainer container;
		private DefaultControllerFactory defaultControllerFactory;
		public MefControllerFactory(string pluginPath)
		{
			this.pluginPath = pluginPath;
			this.catalog = new DirectoryCatalog(pluginPath);
			this.container = new CompositionContainer(catalog);
			this.defaultControllerFactory = new DefaultControllerFactory();
		}
		public System.Web.SessionState.SessionStateBehavior GetControllerSessionBehavior(System.Web.Routing.RequestContext requestContext, string controllerName)
		{
			return SessionStateBehavior.Default;
		}
		public IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)
		{
			IController controller = null;
			if (controllerName != null)
			{
				Lazy<IController> export = this.container.GetExports<IController, IDictionary<string, object>>().Where(c => c.Metadata.ContainsKey("ControllerName")&& c.Metadata["ControllerName"].ToString().ToLowerInvariant().Equals(controllerName.ToLowerInvariant())).FirstOrDefault();
				if (export != null)
				{
					controller = export.Value;
				}
			}
			if (controller == null)
			{
				return this.defaultControllerFactory.CreateController(requestContext, controllerName);
			}
			return controller;
		}
		public void ReleaseController(IController controller)
		{
			IDisposable disposable = controller as IDisposable;
			if (disposable != null)
			{
				disposable.Dispose();
			}
		}
	}




в Global.asax.cs я добавил следующее
Код: c#
1.
2.
ControllerBuilder.Current.SetControllerFactory(new MefControllerFactory(
                    Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugins")));



Далее я добавил новый проект(ClassLibrary), который планируется использоваться как плагин, добавил в него страницу Index.cshtml
и контроллер с кодом
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
[Export(typeof(IController))]
[ExportMetadata("controllerName", "Demo")]
[PartCreationPolicy(CreationPolicy.NonShared)] 
public class DemoController : Controller 
{ 
    public ActionResult Index() 
    { 
        return View("~/Plugins/Views/Demo/Index.aspx"); 
    } 
}



Проект запускается и далее по логике, проходя по ссылке http://localhost:xxxx/Demo я должен попасть на страницу плагина, однако сервер выдаёт мне вот такую ошибку
Код: xml
1.
2.
 The resource cannot be found.
Description: HTTP 404.



Ни как не магу разобраться в чем проблема!

материалы для работы я брал от сюда + несколько изменил согласно архитектуре ASP.NET MVC 4
http://blog.maartenballiauw.be/post/2009/04/21/ASPNET-MVC-and-the-Managed-Extensibility-Framework-(MEF).aspx
...
Рейтинг: 0 / 0
ASP.NET MVC 4 with MEF 2
    #38289312
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Загрузка возможна только из application base directory,subdirectories,probing path, GAC
Assembly Load Issues
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET MVC 4 with MEF 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]