我使用Unity通过创建自定义控制器激活器类在ASP.Net MVC中执行依赖注入,
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;
}
}
然后是一个自定义依赖控制器解析器类,如下所示,
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;
}
}
然后我将以下行添加到global.asax.cs文件,
DependencyResolver.SetResolver(new CustomControllerDependencyResolver());
注册我的自定义依赖项解析程序。
上述方法适用于MVC控制器,但是当我以前为webapi控制器执行相同操作时,它失败了, 尝试创建“CustomerController”类型的控制器时发生错误。确保控制器具有无参数的公共构造函数。
答案 0 :(得分:0)
问题是MVC和Webapi正在通过他们自己的DI工作,所以它从控制器的构造函数创建对象,它必须是pram-less,但是当你试图创建自己的param构造函数时,这取决于你的DI ,你需要安装学习MVC或Webapi的配置来处理你的DI 在你的情况下,你使用Unity,所以你必须安装unity.webapi 这是代码:
PM&GT;安装包Unity.WebAPI -Version 0.10.0