我正在研究webapi项目&现在我们正在迁移到Owin / Katana托管。我对此几乎没有疑问。
Quest)我可以为每个请求创建OwinMiddleware而不是创建全局对象吗?
我可以创建owinMiddleware但不能按照请求创建它们。我想根据请求创建它们,以便我可以在owinMiddleware中插入一个新对象作为依赖项。我已经在webapi中使用了统一性,所以想要一些与统一一致的解决方案。
我找到了一些链接: -
http://alexmg.com/owin-support-for-the-web-api-2-and-mvc-5-integrations-in-autofac/
http://www.tugberkugurlu.com/archive/owin-dependencies--an-ioc-container-adapter-into-owin-pipeline
但无法用旧统一调整新的IoC。任何人都可以建议任何解决方案
答案 0 :(得分:1)
我找到了一种可以实现这一目标的方法: -
app.Use((IOwinContext context, Func<Task> next) =>
{
ILogger logger = {Resolve dependency using Unity};
CustomOwinMiddleware middleware = new CustomOwinMiddleware(context,next, logger);
return middleware.Invoke();
});
通过这种方式,我可以根据请求生成我的中间件。这是正确的方法吗?
答案 1 :(得分:0)
如果您愿意,我建议对所有可以注入统一的请求使用单个中间件实例。然后,我将在该中间件的invoke方法中创建一个生命周期管理器,并将您想要的任何函数注入代理,而不是在另一个中间件上调用invoke。如果你需要在这些函数中使用OwinContext,你可以将它们作为参数传递。
有关详细信息,请参阅此博客文章: http://codetoast.org/orchard/blog/using-unity-owin-and-web-api-to-organize-log-entries-by-request