gpt4 book ai didi

c# - 如何在 WebApi OwinHost Startup 中使用 Ninject bootstrapper?

转载 作者:IT王子 更新时间:2023-10-29 04:48:41 26 4
gpt4 key购买 nike

我正在从 IIS WebAPI 迁移到 OwinHost。利用最新的预发布版本的 nuget 包,我成功地使用了这里的说明:

https://github.com/ninject/Ninject.Web.Common/wiki/Setting-up-a-OWIN-WebApi-application

这是我的代码 stub :

    public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();

app.UseNinjectMiddleware(CreateKernel);
app.UseNinjectWebApi(config);
}

private static StandardKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Load(Assembly.GetExecutingAssembly());
RegisterServices(kernel);
return kernel;
}

private static void RegisterServices(IKernel kernel)
{
...
}

但在我的代码和文档示例中,Ninject 内核直到启动后才创建。但是,在 Cors 和 OAuth 中间件注册的启动注册过程中,我需要 Ninject DI。在迁移到 OwinHost 之前,我可以这样做:

public void Configuration(IAppBuilder app)
{
_bootstrapper = new Bootstrapper();
_bootstrapper.Initialize(CreateKernel);

var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();

// USE _boostrapper.Kernel here

app.UseNinjectMiddleware(CreateKernel);
app.UseNinjectWebApi(config);
}

但在内部,OwinBootstrapper.Execute 将最终调用 CreateKernel 和 bootstrapper.Initialize 第二次,造成不良后果。

在 Startup 中创建和使用 ninject 内核并仍然注册 Ninject/WebAPI 中间件的正确方法是什么?

最佳答案

将以下 nuget-packages 添加到您的应用程序中:

  1. 安装包 Microsoft.AspNet.WebApi.Owin
  2. 安装包 Ninject

如果您使用的是 web api 版本 5.0.0.0,您还需要下载 Ninject Resolver class from the repo以避免兼容性问题。

创建一个返回内核对象的静态方法

public static class NinjectConfig
{
public static IKernel CreateKernel()
{
var kernel = new StandardKernel();
//Create the bindings
kernel.Bind<IProductsRepository>().To<ProductRepository>();
return kernel;
}
}

然后你可以在你的启动类中使用ninject

public class Startup
{
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
config.DependencyResolver = new NinjectResolver(NinjectConfig.CreateKernel());

config.Routes.MapHttpRoute("default", "api/{controller}/{id}", new { id=RouteParameter.Optional });

app.UseWebApi(config);
}
}

关于c# - 如何在 WebApi OwinHost Startup 中使用 Ninject bootstrapper?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23896806/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com