我可以为每个请求创建OwinMiddleware而不是创建全局对象

时间:2014-04-23 11:57:07

标签: c# asp.net-web-api dependency-injection inversion-of-control owin

我正在研究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。任何人都可以建议任何解决方案

2 个答案:

答案 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