I am using Unity to do dependency injection in ASP.Net MVC by creating a custom controller activator class as,
public class CustomControllerActivator : IControllerActivator
{
public IController Create(RequestContext requestContext, Type controllerType)
{
var controller = default(IController);
if (controllerType != default(Type))
{
controller = ServiceLocator.Current.GetInstance(controllerType) as IController;
}
return controller;
}
}
and then a custom dependency controller resolver class as follows,
public class CustomControllerDependencyResolver : IDependencyResolver
{
public object GetService(Type serviceType)
{
var resolvedObject = default(object);
if (serviceType == typeof(IControllerActivator))
{
resolvedObject = new CustomControllerActivator();
}
return resolvedObject;
}
public IEnumerable<object> GetServices(Type serviceType)
{
var resolvedObjects = default(IEnumerable<Object>);
resolvedObjects = ServiceLocator.Current.GetInstances(serviceType);
return resolvedObjects;
}
}
then I add the following line to global.asax.cs file,
DependencyResolver.SetResolver(new CustomControllerDependencyResolver());
to register my custom dependency resolver.
The above method holds good for MVC controllers but when I used to do the same for webapi controllers it fails as , An error occurred when trying to create a controller of type 'CustomerController'. Make sure that the controller has a parameterless public constructor.
IDependencyResolver. You need to useSystem.Web.Http.Dependencies.IDependencyResolver. See asp.net/web-api/overview/advanced/dependency-injection - haim770System.Web.Http.Dependencies.IDependencyResolverandSystem.Web.Mvc.IDependencyResolverin the same class. - NightOwl888