Начальная структура загрузки в библиотеке классов / dll - PullRequest
3 голосов
/ 05 марта 2010

Каков наилучший подход для начальной загрузки библиотеки DLL с использованием Structuremap? Я не хочу, чтобы потребители библиотеки сами настраивали что-либо, если они этого не хотят. Я думаю, что .config, вероятно, будет самым простым, но опять же 2.6.1 отсутствует, и я пока не знаком со многими его функциями / изменениями.

1 Ответ

5 голосов
/ 08 марта 2010

Как я уже упоминал в моем комментарии выше, вы можете использовать фабричный метод, чтобы убедиться, что контейнер 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>();
}
...