如何在StructureMap ServiceActivator中使用Container而不是ObjectFactory?

时间:2014-08-28 14:09:24

标签: asp.net-web-api structuremap

在使用StructureMap在WebAPI中实现DI时,我们使用

中的 ServiceActivator
public class ServiceActivator : IHttpControllerActivator
{
    public ServiceActivator(HttpConfiguration configuration) {}    

    public IHttpController Create(HttpRequestMessage request,
           HttpControllerDescriptor controllerDescriptor, Type controllerType)
    {
        var controller = ObjectFactory.GetInstance(controllerType) as IHttpController;
        return controller;
    }
}

但现在使用新的 StructureMap ,我的ReSharper建议:

  

类'StructureMap.ObjectFactory'已过时:将在未来的StructureMap 4.0版本中删除ObjectFactory。支持使用Container类进行将来的工作

Container上的intellisense给了我非常有限的信息。

我们应该如何使用容器类重写 ServiceActivator

1 个答案:

答案 0 :(得分:36)

static stuff is going away。如果您没有使用某种类型的服务定位器,那么您将referenced here实施自己的“ObjectFactory”:

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 =>
        {
               // default config
         });
     }
}

更新:我之前的回答是错误的。感谢@JoeMighty的领导。