【发布时间】:2016-01-21 17:41:58
【问题描述】:
我想将统一容器注入 WebController。
我有 UnityDependencyResolver:
public class UnityDependencyResolver : IDependencyResolver
{
readonly IUnityContainer _container;
public UnityDependencyResolver(IUnityContainer container)
{
this._container = container;
}
public object GetService(Type serviceType)
{
try
{
return _container.Resolve(serviceType);
}
catch
{
return null;
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return _container.ResolveAll(serviceType);
}
catch
{
return new List<object>();
}
}
public void Dispose()
{
_container.Dispose();
}
}
然后,在我的 Global.asax 中添加以下行:
var container = new UnityContainer();
container.RegisterType<IService, Service>
(new PerThreadLifetimeManager()).RegisterType<IDALContext, DALContext>();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
那么,如果我在 Web 控制器中使用以下内容:
private IService _service;
public HomeController(IService srv)
{
_service = srv;
}
效果很好。
但我想将它注入 WebAPI 控制器,所以如果我这样做的话:
private IService _service;
public ValuesController(IService srv)
{
_service = srv;
}
它不起作用,它说没有定义构造函数。 好的,我再创建一个构造函数:
public ValuesController(){}
在这种情况下,它只使用这个构造函数,而不是我应该注入统一容器的那个构造函数。
请指教。
【问题讨论】:
-
这是一个 WebAPI 项目或 MVC 应用程序,恰好有一个 API 控制器。
-
这是一个带有 API Controller 的 MVC 项目。
标签: asp.net-mvc-4 asp.net-web-api dependency-injection unity-container