微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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进行物业注入.

原文地址:https://www.jb51.cc/csharp/97753.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐