Web Api与Unity问题与无参数构造函数

时间:2014-11-19 17:57:39

标签: asp.net-mvc asp.net-web-api dependency-injection inversion-of-control unity-container

我正在尝试在WebApi项目中首次设置Unity。我从Nuget添加了Unity.WebApi,我的UnityConfig文件看起来像这样。

public static void RegisterComponents()
    {
        var container = new UnityContainer();

        // register all your components with the container here
        // it is NOT necessary to register your controllers

        // e.g. container.RegisterType<ITestService, TestService>();

        container.RegisterType<ApplicationDbContext>(
            new InjectionFactory(c => new ApplicationDbContext()));

        //container.RegisterType<ApplicationSignInManager>();
        container.RegisterType<ApplicationUserManager>();

        GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);

    }

但是,如果我尝试调用其中一个默认控制器,Account / Register我会收到错误消息,说明我有一个无参数构造函数。

我看过各种文章,解释Unity在MVC和WebApi中的工作方式,但据我所知,我的配置是正确的?我猜我错过了一些简单的东西,因为我的安装完全适用于MVC项目中的构造函数注入。

1 个答案:

答案 0 :(得分:1)

Unity会在尝试解析您的依赖关系时使用最贪婪的构造函数(具有最大参数数量的构造函数),因此在AccountController的情况下,它有两个构造函数,第一个是无参数的,第二个是两个参数,如bellow ,这就是团结会尝试使用的。

public AccountController(ApplicationUserManager userManager,
            ISecureDataFormat<AuthenticationTicket> accessTokenFormat)
        {
            UserManager = userManager;
            AccessTokenFormat = accessTokenFormat;
        }

要覆盖此项,请使用InjectionConstructorAttribute装饰所需的构造函数。

希望有所帮助。