2010-01-03 40 views
0

在C#語言中,使用StructureMap 2.5.4,目標是.NET Framework 3.5庫。爲什麼在兩個相同的安裝結構映射代碼路徑中獲取202

我已採取措施在結構映射DI設置中支持多個配置文件,並使用帶啓動引導程序的ServiceLocator模型。第一次設置是使用掃描儀加載默認註冊表。

現在我想確定運行時我喜歡使用哪種註冊表配置。使用註冊表掃描和加載多個程序集。

似乎它不適用於實際的實現(獲取202,默認實例找不到),但剝離的測試版本確實工作。以下設置。含註冊機構

  • 兩個組件和實現
  • 在運行應用程序域,提供共享接口,並請求創建實例,使用在構造函數中的接口(其中獲得處理感謝名單上Invokation輪廓)掃描他們

下面工作的代碼示例(相同的結構,其他的設置,但更復雜的東西,那得是一個202):

爲202什麼類型couses是可能的,特別是命名SY stem.Uri類型,不是由默認類型的句柄?? (URI是沒有意義的)上的配置文件我用

// let structure map create instance of class tester, that provides the registered 
// interfaces in the registries to the constructor of tester. 

    public class Tester<TPOCO> 
       { 
        private ITestMe<TPOCO> _tester; 

        public Tester(ITestMe<TPOCO> some) 
        { 
         _tester = some; 
        } 

        public string Exec() 
        { 
         return _tester.Execute(); 
        } 
       } 

    public static class Main { 
      public void ExecuteDIFunction() { 
      ObjectFactory.GetInstance<Tester<string>>().Exec(); 
      } 
     } 



    public class ImplementedTestMe<TSome> : ITestMe<TSome> 
     { 
      public string Execute() 
      { 
       return "Special Execution"; 
      } 
     } 

    public class RegistryForSpecial : Registry 
     { 
      public RegistryForSpecial() 
      { 
       CreateProfile("Special", 
           gc => 
            { 
             gc.For(typeof(ITestMe<>)).UseConcreteType(typeof(ImplementedTestMe<>)); 

            }); 
      } 
     } 

編輯: 似乎缺少的接口實際上是一個被確定的運行時間。所以這裏是下一個challange(並解決):

無論何時StructureMap需要創建對象,我提供了一個默認對象。像:

x.ForRequestedType<IConnectionContext>() 
        .TheDefault.Is.Object(new WebServiceConnection()); 

這樣我擺脫了202錯誤,因爲現在可以使用一個真實的實例,無論結構圖需要的類型。

接下來是運行時覆蓋。這在第一次使用ObjectFactory.Configure方法時並不奏效。相反,我使用ObjectFactory.Inject方法來覆蓋默認實例。奇蹟般有效。

ObjectFactory.Inject(typeof(IConnectionContext), context); 

熱愛社區事業。

回答

2

錯誤代碼202表示無法爲請求的類型構建默認實例。你的測試代碼顯然不等於失敗的真實代碼。如果你得到關於Uri的錯誤,你可能有一個依賴,需要在它的構造函數中使用Uri。它可能不是你要求的類 - 它可能是類依賴關係之一 - 或依賴關係之一...在某些地方,有人要求StructureMap解決Uri問題,如果沒有你的幫助,它就無法解決問題。

+0

似乎是缺少一個接口傳遞給頂級接口之一。默認持有Uri屬性類型。 Thanx讓我回到正軌! – Hans 2010-01-04 06:29:51

相關問題