如何在HttpClient中使用Ninject

Man*_*ish 5 asp.net-mvc ninject dotnet-httpclient

使用Ninject向应用程序中的所有Controller实例注入相同的HttpClient对象的推荐方法是什么?

当前,我在Adam Freeman的MVC书之后注入EntityFramework数据库上下文,如下所示。但是,这会为每个控制器实例创建一个新的dbContext,这对于HttpClient可能不是理想的,因为HttpClient旨在在MVC应用程序中的所有控制器之间重用。

构造函数:

public class AccountController : Controller
{
  MyDBContext dbContext = new MyDBContext();

  public AccountController(MyDBContext context)
  {
    dbContext = context;
  }

  ...
}
Run Code Online (Sandbox Code Playgroud)

Ninject工厂如下:

/// Class based on Adam Freeman's MVC book to use dependency injection to create controllers
public class NinjectControllerFactory : DefaultControllerFactory
{
  private IKernel ninjectKernel;

  public NinjectControllerFactory()
  {
    ninjectKernel = new StandardKernel();
    AddBindings();
  }

  protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
  {
    return controllerType == null
      ? null
      : (IController)ninjectKernel.Get(controllerType);
  }

  private void AddBindings()
  {
    ninjectKernel.Bind<MyDBContext>().ToSelf().InTransientScope();        
  }
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*ven 2

您只需将配置更改为:

ninjectKernel.Bind<MyDBContext>().ToSelf().InRequestScope();
Run Code Online (Sandbox Code Playgroud)

有关请求范围的更多信息,请阅读此内容