差異

2015-04-02 93 views
0

它們之間有什麼區別: 差異

我需要

  1. Unity.AspNet.WebApi
  2. Unity.WebForms
  3. Microsoft.Practices.Unity.WebApi ,即1 & 2如果我想在WebAPI的webforms應用程序中使用DI?

    爲什麼不只是使用Microsoft.Practices.Unity,是不是這個足以在各種情況下實現D的庫?

    編輯: 爲什麼Unity.WebForms建立控制樹,如果你只想爲你的IRepository使用DI?

    private void OnPageInitComplete(object sender, EventArgs e) 
         { 
          foreach (Control controlTree in UnityHttpModule.GetControlTree((Page)sender)) 
          { 
           string fullName = controlTree.GetType().FullName ?? string.Empty; 
           string str = (controlTree.GetType().BaseType != null ? controlTree.GetType().BaseType.FullName : string.Empty); 
           if (!this.Prefixes.All<string>((string p) => !fullName.StartsWith(p)) || !this.Prefixes.All<string>((string p) => !str.StartsWith(p))) 
           { 
            continue; 
           } 
           UnityContainerExtensions.BuildUp(this.ChildContainer, controlTree.GetType(), controlTree, new ResolverOverride[0]); 
          } 
         } 
    

回答

1

我只能說Unity.WebForms,因爲這是我寫的,我沒有時間看看其他人呢。它們之間的差異很可能圍繞着每個框架提供的攔截點。 MVC提供了IDependencyResolver接口,使您可以掛鉤到對象創建過程中。這對於WebAPI來說應該是非常相似的(因爲它與MVC共享了很多代碼),但是我最近還沒有能力使用WebAPI。

與MVC不同,WebForms在創建對象時沒有攔截點,所以我們不能執行構造函數注入(首選)。我們能做的最好的事情就是在執行被轉移到你的頁面之前的屬性注入。爲此,我們走控制樹尋找具有[Dependency]屬性的控件(使用Unity的Buildup方法)。 Unity.WebForms的最新版本允許您指定在執行DI時要忽略的名稱空間(默認情況下忽略System.*),因此您可以在行走控制樹時限制其範圍(使用Telerik等第三方控件庫時非常有用) 。

如果您打算在同一個項目中使用WebForms和WebAPI,您可能需要從源代碼定製它們,以確保您使用的是Unity容器的相同實例。 Unity.WebForms將容器的父實例放置在Application緩存中,並且每個請求都將它自己的子容器添加到Request項集合中。

希望有所幫助。