8

我遇到了控制器的这个问题:
尝试创建类型为“ * .WebMvc.Controllers.HomeController”的控制器时发生错误。确保控制器有一个无参数的公共构造函数。

找到ApiController的解决方案,但没有找到关于普通Controller的任何信息。

从头开始创建新的 MVC 4 项目。

HomeController.cs:

public class HomeController : Controller
{
    private IAccountingUow _uow;
    public HomeController(IAccountingUow uow)
    {
        _uow = uow;
    }

UnityDependencyResoler.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。

我做错了什么?一整天都在想。

4

3 回答 3

6

发现问题出在哪里。也许有人会面临同样的情况。问题是 Unity 无法解决IAccountingUow, 因为对接口的分层依赖。

AccountingUow类有两个导体

    public AccountingUow( IRepositoryProvider repositoryProvider)
    {
        Init(repositoryProvider);
    }
    public AccountingUow()
    {
        Init( new RepositoryProvider(new RepositoryFactories()) );
    }

Dependency Resolver 不够聪明,无法采用默认的无参数构造器。它尝试采用依赖于接口的构造函数并且无法解决它,因为没有解决它的规则。

我注释掉了依赖于接口的构造函数,一切正常。

我稍后会为第一个构造函数发布解析器,也许有人会使用它。

于 2012-11-13T09:50:54.997 回答
3

这也可能是由于正在解析的外部类型的参数注入构造函数中的异常。该类型的构造函数的依赖关系可能会成功解析,但如果外部构造函数出现异常,Unity 将报告为“Type Test.Controllers.MyControllerWithInjectedDependencies没有默认构造函数”。

于 2016-11-15T02:29:21.803 回答
0

安装 Nuget 包 Unit.WebAP 而不是 Unity.MVC5 确保使用 nuget 安装了正确的统一包

我安装了 Unity.MVC5 并面临类似的异常“无参数构造函数”

于 2021-10-07T16:11:55.720 回答