Используя информацию из некоторых вопросов здесь, касающихся общих представлений, я создал приложение MVC, которое считывает .dll из своего собственного каталога / bin и создает пользовательский интерфейс на лету. Частичные представления InputBuilder очень помогли. Я также сделал ControllerFactory после совета здесь и в других местах.
Моя проблема в том, что, когда все работает нормально, и отражение распознает типы, которые я передаю, GetType () требует полное имя, полное имя сборки ('scuse код, все еще прототипирование):
public IController CreateController(RequestContext requestContext, string controllerName)
{
Type controllerType = null;
Type genericType;
//controllerName coming in as full assembly-qualified path
Type baseControllerType = typeof(CoreDataController<>);
genericType = Type.GetType(controllerName);
if (genericType != null)
{
controllerType = baseControllerType.MakeGenericType(genericType);
}
if (controllerType != null)
{
return Activator.CreateInstance(controllerType) as IController;
}
return controllerType;
}
Это заставляет мои URL выглядеть так:
http://localhost:1075/CoreData.Plans,%20PlansLib,%20Version=1.0.0.0,%20Culture=neutral,%20PublicKeyToken=null/Create
Очевидно, неоптимальный.
Что бы я хотел, это http://localhost:1075/CoreData.Plans/Create
или даже лучше:
http://localhost:1075/Plans/Create
Должен ли я хранить словарь, доступный для моего контроллера на Application_Start()
, сопоставляя короткие имена с полностью определенными именами? Есть ли какая-то особенность Reflection, по которой я скучаю, которая решит эту проблему?