Autofac使用InjectProperties自动注入依赖关系或使用Resolve<>手动解析

时间:2013-11-08 00:48:05

标签: c# asp.net dependency-injection autofac

我在ASP.Net WebForm中使用Autofac。根据文档,如果我想解决Web控件中的依赖关系,我需要使用以下方法 -

Dependency Injection via Base Page Class

public class MyWebControl : WebControl
{
   public IFirstService FirstService { get; set; }
   public ISecondService SecondService { get; set; }

   public MyWebControl()
   {        
      var cpa = (IContainerProviderAccessor)
           HttpContext.Current.ApplicationInstance;
      var cp = cpa.ContainerProvider;
      cp.RequestLifetime.InjectProperties(this);
   }
}

上面的代码工作正常。但是,为了提高速度,我想我可以使用以下方法自行解决依赖。

public MyWebControl()
{        
   var cpa = (IContainerProviderAccessor)HttpContext.Current.ApplicationInstance;
   var cp = cpa.ContainerProvider;
   FirstService = cp.ApplicationContainer.Resolve<IFirstService>();
   SecondService = cp.ApplicationContainer.Resolve<ISecondService>();
}

如果我错了,请纠正我。我怀疑它是服务定位器模式(Mark Seemann说服务定位器是{{3中的反模式}})。

问题

我应该使用第一种方法还是第二种方法?

1 个答案:

答案 0 :(得分:1)

我会说使用第一种方法。您的代码对实际容器的了解最少。你应该只关心你的依赖。