刚从模板中复制的新mvc 5应用程序如何将依赖项注入控制器?
public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager)
{
UserManager = userManager;
SignInManager = signInManager;
}
您可以在刚刚创建的项目中的帐户控制器中看到这一点。
答案 0 :(得分:3)
ASP.NET MVC 5公开了多个注入点,可以实现您描述的功能。
最明确的一个是DependencyResolver
。默认依赖项解析器只执行Activator.CreateInstance(controllerType)
,因此如果没有选择公共无参数构造函数,它将抛出错误,并且不会查找贪婪的构造函数。
但是,为您的用例增强此行为相当简单。
在您的全局配置中,添加:
DependencyResolver.SetResolver(
type => {
if(type == typeof(AccountController))
{
var userManager = /* resolve the ApplicationUserManager...*/
var signInManager = /* resolve the ApplicationSignInManager...*/
return new AccountController(userManager, signInManager);
}
else
{
return Activator.CreateInstance(type)
}
},
type => Enumerable.Empty<object>()
);
此解决方案传递代理而不是IDependencyResolver
实现,但您可以轻松地提供强类型解析器。
您可能无法通过这种方式获得IoC配置的任何实际价值,但应该注意到,在ASP.NET MVC 5框架的情况下完全可行。最佳实践是引用NuGet包来将MVC 5与您首选的容器库集成,然后让它重新进行繁重的工作。我个人喜欢StructureMap(在this post的选定答案中查看如何以这种方式执行此操作的示例)
答案 1 :(得分:1)
没有。我相信下一个版本将附带一个IOC容器,但MVC5不会