2014-12-19 19 views
1

我想學習http://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection的Owin和Katana架構。我嘗試使用OwinStartup作爲類級別的屬性,並且因爲它在彙編級別而無法這樣做。我感到奇怪爲什麼它在組裝層面受到限制。爲什麼OwinStartupAttribute在裝配層面?

+1

只是一個猜測。加載裝配級別屬性可能會更快,而不是加載所有類並檢查它們的屬性。另外,如果您在一個文件中定義了所有程序集屬性,那麼意外添加兩個或更多個「OwinStartup」屬性的可能性就會降低(如果它起作用,可能會造成混淆)。 – milan

+0

其實我試圖理解。這個屬性的建築效益 – Thanigainathan

回答

2

很多米蘭在評論中所說的。它主要用於性能目的,因爲與獲取程序集中所有類型的列表(可能有成千上萬,甚至更多)相比,掃描程序集級屬性相當快,然後獲取每種類型的所有屬性在組裝中。

因此,在一些合理類型的應用程序中,可能有50個程序集,每個程序集的平均值爲200個類型。與掃描類型級別屬性50 * 200 = 10,000次相比,掃描彙編級屬性的速度要快50倍。

另外,掃描類型會導致很多其他的事情發生,例如類型解析,這可能導致失敗。諸如ASP.NET MVC和Web API等系統會在所有引用的程序集中查找所有類型,並且他們必須做很多欺騙才能使其工作(儘管他們有充足的理由這麼做)。