控制器的依赖注入
本文仅适用于 Asp.Net MVC
在 Asp.Net MVC
中使用依赖注入不是太容易,它需要重写 DefaultControllerFactory
类的相关方法,实现控制器的注入。
Fireasy 已经为你做好了这一切的准备工作,它的 IOC
使用的是 Container。你只需要在 Global 中将 DefaultControllerFactory
替换掉即可。如下所示:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//MVC控制器工厂添加 IOC 容器
var container = ContainerUnity.GetContainer();
ControllerBuilder.Current.SetControllerFactory(new ControllerFactory(container));
//注入所有控制器
container.RegisterControllers(Assembly.GetExecutingAssembly());
//注入DbContext
container.Register<DbContext>(Lifetime.Scoped);
}
}
你需要调用扩展方法 RegisterControllers 将程序集中所有的控制器映射到容器中,这样,你就可以在控制器里使用注入了。如下所示:
public class HomeController : Controller
{
private readonly DbContext _dbContext;
public HomeController(DbContext dbContext)
{
_dbContext = dbContext;
}
public ActionResult Index()
{
return View();
}
}
除了使用构造器注入,你也可以使用属性注入,但注意属性必须是 public 的。如下所示:
public class HomeController : Controller
{
public DbContext DbContext { get; set; }
public ActionResult Index()
{
return View();
}
}