将Ninject与Azure移动应用程序后端一起使用

时间:2018-08-03 23:30:12

标签: .net api web ninject azure-mobile-services

我试图弄清楚如何将Ninject与Azure移动应用程序后端一起使用。移动应用程序后端是.Net Web应用程序。

在NuGet软件包部分的the Ninject.Web.Common wiki中,按照Ninject文档,我认为在我安装Ninject.Web.Common.WebHost时,应该在App_Start文件夹中获得NinjectWebCommon类。我没有得到,我不确定我是否遵循正确的指示。谁能指出我正确的方向?谢谢。

1 个答案:

答案 0 :(得分:0)

当我们使用Mobile App .NET Backend时,它是一个OWIN项目,而不是常见的ASP.NET MVC项目,因此它不使用HttpApplication作为上述文章(在Ninject中,{{ 1}}扩展了NinjectHttpApplication)。

我们可以在“ App_ Start”文件夹下创建HttpApplication类,并通过方法NinjectWebCommonNinjectWebCommon中注册我们的 IDependencyResolver

这是一个有关使用Ninject定义IDependencyResolver的演示:

RegisterServices(IKernel kernel)

NinjectWebCommon 中注册我们的 NinjectDependencyResolver

public class NinjectDependencyResolver : IDependencyResolver
{
    private IKernel kernal;

    public NinjectDependencyResolver(IKernel kernalParam)
    {
        kernal = kernalParam;
        AddBindings();
    }
    public object GetService(Type serviceType)
    {
        return kernal.TryGet(serviceType);
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        return kernal.GetAll(serviceType);
    }

    public void AddBindings()
    {
        kernal.Bind<IValueCalculator>().To<LinqValueCalculator>().InRequestScope();
        kernal.Bind<IDiscountHelper>().To<DefaultDiscountHelper>().WithConstructorArgument("discount", 10m);
        kernal.Bind<IDiscountHelper>().To<FlexibleDiscountHelper>().WhenInjectedInto<LinqValueCalculator>();
    }
}

然后我们可以在控制器构造函数中使用DI:

public static class NinjectWebCommon 
{
  。。。
    /// <summary>
    /// Load your modules or register your services here!
    /// </summary>
    /// <param name="kernel">The kernel.</param>
    private static void RegisterServices(IKernel kernel)
    {
        System.Web.Mvc.DependencyResolver.SetResolver(new
            EssentialTools.Infrastructure.NinjectDependencyResolver(kernel));
    }
}