我正在尝试在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项目中的构造函数注入。
答案 0 :(得分:1)
Unity会在尝试解析您的依赖关系时使用最贪婪的构造函数(具有最大参数数量的构造函数),因此在AccountController的情况下,它有两个构造函数,第一个是无参数的,第二个是两个参数,如bellow ,这就是团结会尝试使用的。
public AccountController(ApplicationUserManager userManager,
ISecureDataFormat<AuthenticationTicket> accessTokenFormat)
{
UserManager = userManager;
AccessTokenFormat = accessTokenFormat;
}
要覆盖此项,请使用InjectionConstructorAttribute装饰所需的构造函数。
希望有所帮助。