c# – ASP.Net MVC 6中的依赖注入(DI)

前端之家收集整理的这篇文章主要介绍了c# – ASP.Net MVC 6中的依赖注入(DI)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在阅读这篇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]属性,那么什么是优势?

如果我们使用[Activate]属性,那么我们可以从第一个相同的代码中消除哪些代码行.谢谢

解决方法

两个代码块之间的差异确实是第一个利用构造函数注入来解析对TimeService的依赖,而第二个示例将属性标记为需要使用Property Injection解析的属性.

这意味着以下构造函数变得多余:

public HomeController(TimeService timeService)
{
    TimeService = timeService;
}

至于为什么会选择构造函数属性注入,我发现尝试在构造函数中清楚地列出你的依赖项列表会突出显示一个类过于依赖,这引起了对类正在尝试完成的内容的关注.,随后,使其成为重构的候选人.

从beta5开始通过[Activate] will not be supported进行物业注入.

猜你在找的C#相关文章