views:

771

answers:

4

Hi,

At the moment I am trying to get into the ASP.NET MVC framework.
For most of my test applications I used a single assembly/project. This worked fine for some smaller applications. Then I wondered how I could place my model, controller and view classes into separate assemblies? In really big web-applications it is not very realistic to put everything into a single assembly/project.

So my question is: Is it possible to tell the ASP.NET MVC framework to search in another assembly for views and/or controllers without losing the built-in flexibility of the routing engine?

+1  A: 

Create a separate class library project for each layer of responsibility, compile to create the assembly and then reference each in your application where appropriate.

James
You mean for example instead of using folder "Views" in my main assembly i can simply create a class library named "MyProject.Views"?
Alexander
Hmm i tested this, but it doesn't work! The MVC framework will still store everything in the main assembly.
Alexander
I mean basically group your code into relevant projects and compile them as separate library classes which would generate an assembly. Then you just reference that assembly in your project where need to access them.I assure you it works...
James
I think you are adding classes to your website project and then compiling as a web application....which will indeed generate 1 assembly for all. You need to create separate class library projects and move the classes into each and then compile separately.
James
+1  A: 

Yes, if you use one of the supported dependency injection containers, then their configuration data typically specify not only the class to be loaded in response to a particular query, but also the assembly from which it is to be loaded. This allows you to split your classes up across arbitrary assemblies and MVC will still be able to find them.

Although, of course, the simpler answer provided by Unknown (Google) will also work!

Colin Desmond
+2  A: 

(unknown) is correct. Create two projects, a class library and an MVC web project. The MVC project should reference the class library that contains the controllers and code behind files (global asax etc). Here is an example layout.

The class library should only contain .cs files and no views (.aspx/.ascx files).

MyProject.BaseSite (class library)
    + Controllers
        - HomeController.cs
        - ... any other controllers
    - default.aspx.cs
    - global.asax.cs

MVC web project should contain configs, views etc and a reference to your class library

MyProject.ExampleSite
    + Content
        + scripts
        + css
        + images
    + Views
        + Home
            - index.aspx
            - .. other aspx files
        + Shared
            - Site.master
    - web.config

Remember the different namespaces. You can then create multiple Example websites that reference the same code. This allows you to effectively skin your website completely differently.

David Liddle
A: 

I realize that this is a really old question but I have written an article on how to exactly what you are asking for

http://dotnetslackers.com/articles/aspnet/storing-asp-net-mvc-controllers-views-in-separate-assemblies.aspx

DustinDavis