类库/ dll中的structuremap bootstrap

Rob*_*len 3 structuremap

使用structuremap引导dll的最佳方法是什么?我真的不希望图书馆的消费者在他们不想要的时候自己配置任何东西.我认为.config可能是最简单的,但是2.6.1已经出来了,我还不熟悉它的许多功能/变化.

Kev*_*evM 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>();
}
Run Code Online (Sandbox Code Playgroud)