3
使用結構映射引導dll的最佳方法是什麼?我不是真的希望圖書館的消費者必須自己配置任何東西,如果他們不想。我在想.config可能是最簡單的,但是2.6.1又出來了,我還不熟悉它的許多特性/變化。類庫中的結構映射引導/ dll
使用結構映射引導dll的最佳方法是什麼?我不是真的希望圖書館的消費者必須自己配置任何東西,如果他們不想。我在想.config可能是最簡單的,但是2.6.1又出來了,我還不熟悉它的許多特性/變化。類庫中的結構映射引導/ dll
正如我在上面的評論中提到的,您可以使用工廠方法來確保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>();
}
您的圖書館是否有共同的入口點或初始化?更糟糕的情況下,你可以使用一個靜態初始值設定項來引導StructureMap。 – KevM
問題是沒有一個真正常見的入口點。這些類有構造函數,但似乎很難處理它。你能解釋一下靜態初始化器嗎?你的意思只是檢查一個靜態參數,指示ctors中的初始化? –
如果您的圖書館正在使用DI,並且需要配置StructureMap,則需要在圖書館的使用者首先觸摸您的圖書館以旋轉StructureMap容器的位置。也許你可以使用工廠方法作爲API用戶構建對象的方式,同時確保配置器已配置好。忽略它們是邪惡的靜態初始化器。我在嗅膠水。 – KevM