ASP.Net MVC 6 中的依赖注入 (DI)
Dependency injection (DI) in ASP.Net MVC 6
我正在阅读一篇关于 ASP.Net MVC 6 中的简单依赖注入的文章 url http://weblogs.asp.net/scottgu/introducing-asp-net-5
它们展示了我们如何轻松地将依赖项注入项目
第一个
namespace WebApplication1
{
public class TimeService
{
public TimeService()
{
Ticks = DateTime.Now.Ticks.ToString();
}
public String Ticks { get; set; }
}
}
register the time service as a transient service in the ConfigureServices method of the Startup class:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddTransient<TimeService>();
}
public class HomeController : Controller
{
public TimeService TimeService { get; set; }
public HomeController(TimeService timeService)
{
TimeService = timeService;
}
public IActionResult About()
{
ViewBag.Message = TimeService.Ticks + " From Controller";
System.Threading.Thread.Sleep(1);
return View();
}
}
第二个
public class HomeController : Controller
{
[Activate]
public TimeService TimeService { get; set; }
}
现在看第二个代码。他们是不是想说,如果我们使用 [Activate]
属性,那么我们就不必通过控制器构造函数注入来实例化 TimeService
?
请告诉我如果我们使用 [Activate]
属性会有什么优势?
如果我们使用 [Activate]
属性,那么我们可以从第一个相同的代码中删除哪一行代码。谢谢
两个代码块之间的区别确实是第一个利用构造函数注入来解决对 TimeService
的依赖,而第二个示例将 属性 标记为需要使用 属性 注入.
这意味着以下构造函数变得多余:
public HomeController(TimeService timeService)
{
TimeService = timeService;
}
至于为什么人们会选择构造函数而不是 属性 注入,我发现当 class 变得过于依赖时,尝试在构造函数中清楚地列出您的依赖项列表会突出显示,这引起了人们对 class 试图完成什么的担忧,并随后使其成为重构的候选对象。
属性 从 beta5 开始通过 [Activate]
will not be supported 注入。
我正在阅读一篇关于 ASP.Net MVC 6 中的简单依赖注入的文章 url http://weblogs.asp.net/scottgu/introducing-asp-net-5
它们展示了我们如何轻松地将依赖项注入项目
第一个
namespace WebApplication1
{
public class TimeService
{
public TimeService()
{
Ticks = DateTime.Now.Ticks.ToString();
}
public String Ticks { get; set; }
}
}
register the time service as a transient service in the ConfigureServices method of the Startup class:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddTransient<TimeService>();
}
public class HomeController : Controller
{
public TimeService TimeService { get; set; }
public HomeController(TimeService timeService)
{
TimeService = timeService;
}
public IActionResult About()
{
ViewBag.Message = TimeService.Ticks + " From Controller";
System.Threading.Thread.Sleep(1);
return View();
}
}
第二个
public class HomeController : Controller
{
[Activate]
public TimeService TimeService { get; set; }
}
现在看第二个代码。他们是不是想说,如果我们使用 [Activate]
属性,那么我们就不必通过控制器构造函数注入来实例化 TimeService
?
请告诉我如果我们使用 [Activate]
属性会有什么优势?
如果我们使用 [Activate]
属性,那么我们可以从第一个相同的代码中删除哪一行代码。谢谢
两个代码块之间的区别确实是第一个利用构造函数注入来解决对 TimeService
的依赖,而第二个示例将 属性 标记为需要使用 属性 注入.
这意味着以下构造函数变得多余:
public HomeController(TimeService timeService)
{
TimeService = timeService;
}
至于为什么人们会选择构造函数而不是 属性 注入,我发现当 class 变得过于依赖时,尝试在构造函数中清楚地列出您的依赖项列表会突出显示,这引起了人们对 class 试图完成什么的担忧,并随后使其成为重构的候选对象。
属性 从 beta5 开始通过 [Activate]
will not be supported 注入。