将参数传递给AppFunc

时间:2015-05-10 14:33:17

标签: c# .net owin

我正在关注this article以了解OWIN,关于第3点和第4点,我们想知道如何将参数传递给Logging构造函数,以便我可以将其传递给owin框架,如图所示第4点。

我使用以下代码行创建了AppFunc别名:

using AppFunc = Func<IDictionary<string, object>, Task>;

甚至称为等号右侧的表达式是什么?

所以现在我的构造函数就像这样

    public LoggingMiddleware(AppFunc next, MyDependency dependency)
    {

    }

现在我该如何创建对象?

在Point#3中,它说我可以向构造函数添加一个依赖项对象,并给出一个如何使用类型名称注册它的示例。在文章的第4点中,它说你也可以提前创建一个实例并在注册时传递它,但是它没有解释如何创建构造函数。我试过这个并没有用

LoggingMiddleware lmw = new LoggingMiddleware(new Func<"","">(),depObj);

我想创建LoggingMiddleware的构造函数,以便我可以使用此行将其注册到OWIN框架

var logger = new LoggingMiddleware(????);
app.Use(logger);

1 个答案:

答案 0 :(得分:1)

AppFunc由框架提供,因此您不需要创建它。

根据第3部分,如果要使用类型AppFunc将被注入构造函数。

根据第4部分,如果要使用实例,则不要将AppFunc作为依赖项注入,而是使用另一种Initialize方法。

你可能会将两者结合起来:

public class LoggingMiddleware
{
    private AppFunc next;

    public LoggingMiddleware(AppFunc next, MyDependency dependency)
    {
        this.next = next;
    }

    public void Initialize(AppFunc next)
    {
        this.next = next;
    }

    public async Task Invoke(IDictionary<string, object> environment)
    {
        await next.Invoke(environment);
    }
}

用作类型,如下所示:

app.Use(typeof(LoggingMiddleware), depObj);

并像这样使用实例

var logger = new LoggingMiddleware(null, depObj);
app.Use(logger);