2010-03-04 26 views
3

使用結構映射引導dll的最佳方法是什麼?我不是真的希望圖書館的消費者必須自己配置任何東西,如果他們不想。我在想.config可能是最簡單的,但是2.6.1又出來了,我還不熟悉它的許多特性/變化。類庫中的結構映射引導/ dll

+0

您的圖書館是否有共同的入口點或初始化?更糟糕的情況下,你可以使用一個靜態初始值設定項來引導StructureMap。 – KevM

+0

問題是沒有一個真正常見的入口點。這些類有構造函數,但似乎很難處理它。你能解釋一下靜態初始化器嗎?你的意思只是檢查一個靜態參數,指示ctors中的初始化? –

+0

如果您的圖書館正在使用DI,並且需要配置StructureMap,則需要在圖書館的使用者首先觸摸您的圖書館以旋轉StructureMap容器​​的位置。也許你可以使用工廠方法作爲API用戶構建​​對象的方式,同時確保配置器已配置好。忽略它們是邪惡的靜態初始化器。我在嗅膠水。 – KevM

回答

5

正如我在上面的評論中提到的,您可以使用工廠方法來確保StructureMap容器​​已啓動並準備好去庫中的頂級類。這是一個例子。

public interface ILibraryClass 
{ 
    void SomethingAwesome(); 
} 

public class LibraryClass : ILibraryClass 
{ 
    public void SomethingAwesome() 
    { 
    } 
} 

public class API 
{ 
    private static IContainer _container; 

    private static IContainer Container 
    { 
     get 
     { 
      if (_container == null) //TODO add locking around this for thread safety? 
      InitializeContainer(); 

      return _container; 
     } 
    } 

    private static void InitializeContainer() 
    { 
     _container = new Container(config => { config.For<ILibraryClass>().Use<LibraryClass>(); }); 
    } 

    public static ILibraryClass LibraryClass() 
    { 
     return Container.GetInstance<ILibraryClass>(); 
    } 
} 

[Test] 
public void library_factory_method() 
{ 
    API.LibraryClass().ShouldBeOfType<LibraryClass>(); 
}