我正在阅读这篇url
http://weblogs.asp.net/scottgu/introducing-asp-net-5中关于ASP.Net MVC 6中轻松依赖注入的文章
它们表明我们可以非常轻松地将依赖项注入到项目中
第一个
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]属性,那么什么是优势?
解决方法
两个代码块之间的差异确实是第一个利用构造函数注入来解析对TimeService的依赖,而第二个示例将属性标记为需要使用Property Injection解析的属性.
这意味着以下构造函数变得多余:
public HomeController(TimeService timeService) { TimeService = timeService; }
至于为什么会选择构造函数与属性注入,我发现尝试在构造函数中清楚地列出你的依赖项列表会突出显示一个类过于依赖,这引起了对类正在尝试完成的内容的关注.,随后,使其成为重构的候选人.
从beta5开始通过[Activate] will not be supported进行物业注入.