我有一个 WebApi 解决方案,我正在使用StructureMap.WebApi2 Nuget 包进行依赖注入。
我想使用Fody Tracer来编织跟踪方法。我正在实现我自己的自定义日志适配器,它要求我从静态类/方法返回我的记录器的实例。
我使用结构映射从静态类/方法获取记录器实例的正确方法是什么?
我有一个 WebApi 解决方案,我正在使用StructureMap.WebApi2 Nuget 包进行依赖注入。
我想使用Fody Tracer来编织跟踪方法。我正在实现我自己的自定义日志适配器,它要求我从静态类/方法返回我的记录器的实例。
我使用结构映射从静态类/方法获取记录器实例的正确方法是什么?
传统上,您会使用 StructureMapObjectFactory.GetInstance<T>
来解决静态方法的依赖关系。然而,这已被弃用,因为它通常不受欢迎,因为使用它将您的代码紧密耦合到 IoC 容器(请参阅服务定位器反模式上的这篇文章)。
下一个最佳方法是创建您自己的 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()) };
});
}
}
有关更深入的实现,请参阅这篇文章。