如何在 Web API 2 中使用静态类中的结构图



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

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

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

传统上,你会使用 StructureMap 的ObjectFactory.GetInstance<T>来解决静态方法的依赖关系。但是,这已被弃用,因为它通常不受欢迎,因为使用它将您的代码紧密耦合到 IoC 容器(请参阅这篇关于服务定位器反模式的文章)。

下一个最佳方法是创建自己的 ObjectFactory 静态等效项,该 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()) };
            });
    }
}

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

最新更新