如何从 Web API 2 中的静态类使用 StructureMap?

jkr*_*r01 1 c# structuremap static fody asp.net-web-api2

我有一个 WebApi 解决方案,我正在使用StructureMap.WebApi2 Nuget 包进行依赖注入。

我想使用Fody Tracer编织跟踪方法。我正在实现我自己的自定义日志适配器,这要求我从静态类/方法返回我的记录器实例。

我使用结构映射从静态类/方法获取记录器实例的正确方法是什么?

Jos*_*ard 5

传统上,您会使用 StructureMapObjectFactory.GetInstance<T>来解析静态方法的依赖项。然而,这已经被弃用了,因为它通常是不受欢迎的,因为使用它会将您的代码与 IoC 容器紧密耦合(请参阅有关 Service Locator 反模式的这篇文章)。

下一个最佳方法是创建您自己的 ObjectFactory 的静态等效项,它返回一个 IContainer 实例,类似于:

public static class ObjectFactory  
{
    private static readonly Lazy<Container> _containerBuilder = new Lazy<Container>(defaultContainer, LazyThreadSafetyMode.ExecutionAndPublication);

    public static IContainer Container
    {
        get { return _containerBuilder.Value; }
    }

    private static Container defaultContainer()
    {
            return new Container(x => { 
                x.AddRegistry(new YourRegistry()) };
            });
    }
}
Run Code Online (Sandbox Code Playgroud)

有关更深入的实现,请参阅帖子。