如何删除OWIN中的中间件?

时间:2015-03-06 08:53:16

标签: c# asp.net .net owin

我已在Configuration方法中注册了OWIN中间件。我怎样才能更改删除中间件。

特别是,我希望在更改某些文件后修改(删除/添加)StaticFiles中间件(我想通过FileSystemWatcher检测)。

注意:关于Node.js的连接有a similar question(我认为OWIN的概念来自哪里)。

2 个答案:

答案 0 :(得分:4)

如果您使用的是AppBuilder的微软实现(Microsoft.Owin.Builder.AppBuilder),则不能。

在此实现中,中间件存储在私有IList<T>中,并且没有为此实例提供公共访问。

您可以创建自己的AppBuilder类,该类必须实现Owin.IAppBuilder接口。

我没有想太多,但允许删除中间件感觉非常痛苦:

中间件可以相互链接。 因此,如果删除一个,则必须管理引用它的其他中间件的关系。

所以你不能简单地删除中间件。但是你可以用条件包装中间件的执行。 可能有更好的解决方案。

答案 1 :(得分:0)

IAppBuilder不会这样做,但你可以在允许你的管道中添加你自己的舞台。

一个简单的阶段就是使用现有的List<Action<OwinContext>> befores;List<Action<OwinContext>> afters;列表。舞台得到定义和添加,如:

appBuilder.Use(
    new Func<Func<IDictionary<string, object>, Task>, Func<IDictionary<string, object>, Task>>(
        next => async environment =>
            {
                var ctx = new OwinContext(environment);
                lock(befores)
                {
                    foreach(before in befores)
                    {
                        before(ctx);
                    }
                }
                await next.Invoke(environment);
                lock(afters)
                {
                    foreach(after in afters)
                    {
                        after(ctx);
                    }
                }
        }));

然后,您可以按照自己的方式管理beforesafters列表(当然,也可以使用适当的锁定)。 警告:我通过剥离我使用的代码得到了这个,但我甚至没有尝试编译它