1

我正在使用StructureMap來解析依賴關係,它可以在早期版本中正常工作。但是在更新StructureMap版本4.2.0.40後,我正面臨着這個錯誤。StructureMap:名稱'ObjectFactory'在當前上下文中不存在

ObjectFactory現在已在新版本中廢棄。 那麼如何修改以下邏輯以適應更新版本。

protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) 
     { 
      try 
      { 
       if ((requestContext == null) || (controllerType == null)) 
        return null; 

       return (Controller)ObjectFactory.GetInstance(controllerType); 
      } 
      catch (StructureMapException) 
      { 
       System.Diagnostics.Debug.WriteLine(ObjectFactory.WhatDoIHave()); 
       throw new Exception(ObjectFactory.WhatDoIHave()); 
      } 
     } 

Bootstrapper.cs

public static class Bootstrapper 
    { 
     public static void Run() 
     { 
      ControllerBuilder.Current 
       .SetControllerFactory(new StructureMapControllerFactory()); 

      ObjectFactory.Initialize(x => 
      { 
       x.AddConfigurationFromXmlFile(@"D:\Samples\Web_API\OneCode\StructureMap.Web\StructureMap.Web\StructureMap.xml"); 
      }); 
     } 
    } 
} 

回答

2

您必須添加的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 
     }); 
    } 
} 

詳情請參閱here

或者返回使用舊版本的StructureMap。