Possible Duplicate:
How do I register a controller that has been created in an AREA
I have the question - is it possible to do the next?
I have three Areas:
_Default
SiteOne
SiteTwo
Inside each area i have a ApiController with the same name, but in different namespaces of course:
MvcAppliaction.Areas._Default.Controllers.ValuesController
MvcAppliaction.Areas.SiteOne.Controllers.ValuesController
MvcAppliaction.Areas.SiteTwo.Controllers.ValuesController
I also have a value of current (which i would like to use) Area in configuration.
I would like to map user to controller in the proper Area (which i can find in the configuration) if he enters in the browser:
/api/values
For example, if current Area in config file is SiteOne then this request should be mapped to MvcAppliaction.Areas.SiteOne.Controllers.ValuesController controller, but if i change current Area in config file to SiteTwo of _Default it should be mapped to correct controller.
PS. With MVC controller it's easy, you just have to set your route:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MvcApplication.Web.Areas." + SiteName + ".Controllers") }
);
My Suggestion would be to implement a custom DefaultControllerFactory.
You can see a very good example here
The default controller factory just lists all controllers by name on a list not allowing for this kind of functionality. The article above shows you how to create a new factory and take control over the controller creation allowing you to easily match routes to specific namespace's.
That would give the functionality you are looking for.