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



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

遵循Ninject的Ninject文档。网状物在NuGet包部分的公共wiki中,我相信当我安装Ninject时,我应该在App_Start文件夹中获得一个NinjectWebCommon类。网状物常见的WebHost。我不明白,我不确定我是否遵循了正确的指示。有人能给我指正确的方向吗?谢谢

因为我们正在使用移动应用程序。NET后端,它是一个OWIN项目,而不是一个常见的ASP。NET MVC项目,所以它没有像上面提到的文章那样使用HttpApplication(在Ninject中,NinjectHttpApplication扩展了HttpApplication(。

我们可以在"App_Start"文件夹下创建NinjectWebCommon类,并通过方法RegisterServices(IKernel kernel)NinjectWebCommon中注册我们的IDdependencyResolver

下面是一个关于用Ninject:定义IDdependencyResolver的演示

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>();
}
}

NinjectWebCommon:中注册我们的NinjectDependencyResolver

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));
}
}

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

public class HomeController : Controller
{
private IValueCalculator calc;
public HomeController(IValueCalculator calc)
{
this.calc = calc;
}
//........
} 

最新更新