mvc 5 应用程序可以开箱即用吗?
Can mvc 5 application has IoC out of the box?
刚刚从模板重新生成的新 mvc 5 应用程序怎么可能将依赖项注入到控制器中?
public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager)
{
UserManager = userManager;
SignInManager = signInManager;
}
这是您可以在刚刚创建的项目中的帐户控制器中看到的内容。
没有。我相信下一个版本会带有一个IOC容器,但是MVC5不会
ASP.NET MVC 5 公开了多个注入点,可实现您描述的功能。
最明确的是DependencyResolver
。默认依赖解析器只执行 Activator.CreateInstance(controllerType)
,因此如果没有选择 public 无参数构造函数,它将抛出错误,并且不会寻找贪婪的构造函数。
但是,为您的用例增强此行为相当简单。
在您的全局配置中,添加:
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 的选定答案中查看如何以这种方式执行此操作的示例)
刚刚从模板重新生成的新 mvc 5 应用程序怎么可能将依赖项注入到控制器中?
public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager)
{
UserManager = userManager;
SignInManager = signInManager;
}
这是您可以在刚刚创建的项目中的帐户控制器中看到的内容。
没有。我相信下一个版本会带有一个IOC容器,但是MVC5不会
ASP.NET MVC 5 公开了多个注入点,可实现您描述的功能。
最明确的是DependencyResolver
。默认依赖解析器只执行 Activator.CreateInstance(controllerType)
,因此如果没有选择 public 无参数构造函数,它将抛出错误,并且不会寻找贪婪的构造函数。
但是,为您的用例增强此行为相当简单。
在您的全局配置中,添加:
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 的选定答案中查看如何以这种方式执行此操作的示例)