【问题标题】:How to use Container instead of ObjectFactory in StructureMap ServiceActivator?如何在 StructureMap ServiceActivator 中使用 Container 而不是 ObjectFactory?
【发布时间】:2014-08-28 14:09:23
【问题描述】:

在使用 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”类已过时:ObjectFactory 将在未来 4.0 版本的 StructureMap 中删除。支持在以后的工作中使用 Container 类

Container 上的智能感知只给了我非常有限的信息。

我们应该如何用 Container 类重写我们的 ServiceActivator

【问题讨论】:

    标签: asp.net-web-api structuremap


    【解决方案1】:

    static stuff is going away。如果您不使用某种类型的服务定位器,您将拥有自己的“ObjectFactory”作为referenced here

    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 的提醒。

    【讨论】:

    • 这肯定只是创建了一个空容器的新实例吗?根据我的经验,情况似乎如此。
    • @JoeMightly 引用作者的话“无论如何,ObjectFactory 只是 Container 的一个静态外观”。但是,我将在今天晚些时候提出一个证明这一点的要点。
    • 我也读过这个;但是我似乎最终得到了一个空容器。非常感谢能证明这一点的要点!
    • @JoeMighty 你是对的!我使用 Service Locator 和/或内置的 MVC DependencyResolver 来解决 SM3,所以我从来没有遇到过这个问题。然而,经过几次测试,据我所知,我最终得到的是你提到的空容器。
    • 服务位置不是也从来不是反模式。模式使用不正确不会导致模式本身错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多