Я пытаюсь структурировать свое приложение ASP.NET MVC, переместив каждую область в свой собственный проект.Все работало нормально, пока я не решил реорганизовать материал AreaRegistration и использовать свой собственный подход (таким образом, я также могу регистрировать фильтры и зависимости в моем модуле).Используя отражатель, мне удалось придумать следующее.
Сначала я реализую следующий интерфейс для каждого модуля / области:
public interface IModule {
string ModuleName { get; }
void Initialize(RouteCollection routes);
}
Например:
public class BlogsModule : IModule {
public string ModuleName { get { return "Blogs"; } }
public void Initialize(RouteCollection routes) {
routes.MapRoute(
"Blogs_Default",
"Blogs/{controller}/{action}/{id}",
new { area = ModuleName, controller = "Home", action = "Index",
id = UrlParameter.Optional },
new string[] { "Modules.Blogs.Controllers" }
);
}
}
Затем в моем файле Global.asax (событие Application_Start) я говорю:
// Loop over the modules
foreach (var file in Directory.GetFiles(Server.MapPath("~/bin"), "Modules.*.dll")) {
foreach (var type in Assembly.LoadFrom(file).GetExportedTypes()) {
if (typeof(IModule).IsAssignableFrom(type)) {
var module = (IModule)Activator.CreateInstance(type);
module.Initialize(RouteTable.Routes);
}
}
}
Затем я удалил существующий компонент AreaRegistration.До этого момента все работало нормально.Когда я запускаю свое приложение и отображаю ссылку на модуль, например:
@Html.ActionLink("Blogs", "Index", "Home", new { area = "Blogs" }, null)
Отображается правильный URL-адрес, но когда я нажимаю на URL-адрес, отображается неправильный вид.После отладки похоже, что URL-адрес направлен на правильное действие в HomeController моего модуля блогов.Однако он пытается отобразить представление Home / Index.cshtml в основном проекте, а не в модуле / области.Я предполагаю, что где-то в том же духе я пропустил, как сказать механизму представления обрабатывать перенаправленный URL как область, которая, кажется, игнорирует AreaViewLocationFormats (внутри RazorViewEngine).
Я был бы признателенесли бы кто-то мог показать мне, чего мне не хватает.Спасибо