2015-05-10 253 views
1

爲了解OWIN以及關於點3和點4在那裏我想知道如何將一個參數傳遞給Logging構造函數,所以我可以將它傳遞給owin框架作爲this article如#4所示。將參數傳遞給AppFunc

我創建了使用此行代碼AppFunc別名:

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

什麼是等號右邊的表達,甚至叫什麼名字?

所以現在我的構造是這樣

public LoggingMiddleware(AppFunc next, MyDependency dependency) 
    { 

    } 

現在如何創建對象?

在第3點,它說我可以添加一個依賴對象給構造函數,並給出了一個如何使用類型名註冊的例子。在文章中的第4點,它說,你也可以預先創建一個實例,並在註冊時將它傳入,但是它不解釋如何創建構造函數。我想這一點,並沒有奏效

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

我想創建LoggingMiddleware的構造函數,因此我可以用這條線

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

目前還不清楚你在問什麼。這不是由鏈接覆蓋?它說要註冊使用'app.Use(typeof(LoggingMiddleware),new MyDependency())' –

+0

嗨查爾斯,我更新了我的問題。謝謝。 – user20358

回答

1

AppFunc由框架提供其註冊到OWIN框架,因此,你不會創建它。

每部分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); 
+0

沒問題。但是我試圖用這兩種方式註冊相同的中間件:1)像你上面所做的一樣,也是這樣。2)app.Use(typeof(LoggingMiddleware),new LoggingMiddleware()); – user20358

+0

可以這樣做嗎? – user20358

+0

我已經更新了一些適用於這兩者的東西。 –