我在控制器上遇到了这个问题:
尝试创建类型为 ' 的控制器时发生错误*.WebMvc.Controllers.HomeController'。确保控制器具有无参数公共构造函数。
找到了ApiController的解决方案,但是没有找到关于普通Controller的任何内容。
从头开始创建新的 MVC 4 项目。
HomeController.cs:
public class HomeController : Controller
{
private IAccountingUow _uow;
public HomeController(IAccountingUow uow)
{
_uow = uow;
}
UnityDependencyResolver.cs:
public class UnityDependencyResolver : IDependencyResolver
{
private IUnityContainer _container;
public UnityDependencyResolver(IUnityContainer container)
{
_container = container;
RegisterTypes();
}
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 null;
}
}
private void RegisterTypes()
{
_container.RegisterType<IAccountingUow, AccountingUow>();
}
}
全局.asax
protected void Application_Start()
{
//Omitted
DependencyResolver.SetResolver( new UnityDependencyResolver( new UnityContainer()));
}
调试发现,甚至没有尝试解析IAccountingUow。
我做错了什么?
一整天都在思考这个问题。
找到问题出在哪里了。也许有人会面临同样的情况。
问题是Unity无法解决IAccountingUow
,因为接口的层次依赖性。
AccountingUow
班级有两名指挥
public AccountingUow( IRepositoryProvider repositoryProvider)
{
Init(repositoryProvider);
}
public AccountingUow()
{
Init( new RepositoryProvider(new RepositoryFactories()) );
}
依赖解析器不够智能,无法采用默认的无参数构造函数。它尝试采用接口相关的构造函数,但无法解析它,因为没有解析它的规则。
我注释掉了接口相关的构造函数,一切正常。
我稍后会发布第一个构造函数的解析器,也许有人会使用它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)