我正在关注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);
答案 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);