В моем приложении ASP.NET MVC я использую небольшой помощник для итерации через все контроллеры. Этот помощник расположен на другой сборке, чем мое приложение MVC, и я ссылаюсь на него.Использование Assembly.GetCallingAssembly() не возвращает вызывающую сборку
Проблема заключается в том, что при вызове метода Assembly.GetCallingAssembly() в помощнике он не возвращает сборку приложения MVC, но вместо этого возвращает вспомогательную сборку, и это не то, что я ожидаю получить, потому что все мои контроллеры живут в сборке приложений MVC, и мне нужно их отразить.
Мой код:
**The view code(MVC app assembly):**
<nav>
<ul id="menu">
@foreach(var item in new MvcHelper().GetControllerNames())
{
@Html.ActionMenuItem(
(string)HttpContext.GetGlobalResourceObject("StringsResourse", item), "Index",
item)
}
</ul>
</nav>
**The Helper code(independent assembly):**
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();
}
}
Что я здесь делаю неправильно?
+1 за предложение хорошей альтернативы. –