加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 18:09:59 所属栏目:百科 来源:网络整理
导读:我正在阅读这篇url http://weblogs.asp.net/scottgu/introducing-asp-net-5中关于ASP.Net MVC 6中轻松依赖注入的文章 它们表明我们可以非常轻松地将依赖项注入到项目中 第一个 namespace WebApplication1{ public class TimeService { public TimeService()
我正在阅读这篇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进行物业注入.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读