В моем приложении ASP.NET MVC я использую небольшой помощник для перебора всех контроллеров.
Этот помощник находится в другой сборке, чем мое приложение MVC, и я ссылаюсь на него.
Проблема в том, что при вызове метода Assembly.GetCallingAssembly () в помощнике он не возвращает сборку приложения MVC, а вместо этого возвращает сборку помощника.
Это не то, что я ожидаю получить, потому что все мои контроллеры живут в сборке приложения MVC, и я должен это отразить.
Код представления (сборка приложения MVC):
<nav>
<ul id="menu">
@foreach(var item in new MvcHelper().GetControllerNames())
{
@Html.ActionMenuItem(
(string)HttpContext.GetGlobalResourceObject("StringsResourse", item), "Index",
item)
}
</ul>
</nav>
Код Helper (самостоятельная сборка):
public class MvcHelper
{
public List<string> GetControllerNames()
{
var controllerNames = new List<string>();
GetSubClasses<Controller>().ForEach(
type => controllerNames.Add(type.Name));
return controllerNames;
}
private static List<Type> GetSubClasses<T>()
{
return Assembly.GetCallingAssembly().GetTypes().Where(
type => type.IsSubclassOf(typeof(T))).ToList();
}
}
Что я здесь не так делаю?