Перш за все, це, безумовно, гарна ідея поставити свою модель в окремий проект. Як ви виявили, це банально.
Щодо контролерів та представлень, я не бачу очевидної переваги в тому, щоб розділити їх для більшості базових проектів, хоча у певній програмі може виникнути певна потреба.
Якщо ви все-таки вирішите це зробити, то вам потрібно буде сказати структурі, як знайти своїх контролерів. Основний спосіб зробити це - поставити власний ControllerFactory. Ви можете подивитися вихідний код для DefaultControllerFactory, щоб отримати уявлення про те, як це робиться. Підтиснення цього класу та переосмислення методу GetControllerType (string controllerName) може бути достатньою для виконання того, що ви запитуєте.
Після створення власного користувальницького ControllerFactory ви додаєте наступний рядок до Application_Start у global.asax, щоб повідомити рамки, де його знайти:
ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());
Оновлення: прочитайте цю публікацію та повідомлення, на які вона посилається, для отримання додаткової інформації. Дивіться також коментар Філа Хакка до цієї публікації про:
ControllerBuilder.Current.DefaultNamespaces.Add(
"ExternalAssembly.Controllers");
... що не є повним рішенням, але, можливо, досить хорошим для простих випадків.