tik*_*noa 18 c# ninject bootstrapper asp.net-web-api owin
我正在从IIS WebAPI迁移到OwinHost.利用nuget软件包的最新预发布版本,我在这里成功使用了说明:
https://github.com/ninject/Ninject.Web.Common/wiki/Setting-up-a-OWIN-WebApi-application
这是我的代码的存根:
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)
{
...
}
Run Code Online (Sandbox Code Playgroud)
但是在我的代码和文档示例中,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);
}
Run Code Online (Sandbox Code Playgroud)
但在内部,OwinBootstrapper.Execute将最终调用CreateKernel和bootstrapper.Initialize第二次,结果不好.
在Startup中创建和使用ninject内核并仍然注册Ninject/WebAPI中间件的正确方法是什么?
oli*_*lif 21
将以下nuget-packages添加到您的应用程序:
如果您使用的是web api 5.0.0.0版,则还需要从repo下载Ninject Resolver类以避免兼容性问题.
创建一个返回Kernel对象的静态方法
public static class NinjectConfig
{
public static IKernel CreateKernel()
{
var kernel = new StandardKernel();
//Create the bindings
kernel.Bind<IProductsRepository>().To<ProductRepository>();
return kernel;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以在你的启动类中使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
kernel手动创建,然后UseNinjectMiddleware使用相同的,而不是创建另一个.
public void Configuration(IAppBuilder app)
{
var kernel = CreateKernel()
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
// USE kernel here
app.UseNinjectMiddleware(() => kernel);
app.UseNinjectWebApi(config);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15708 次 |
| 最近记录: |