1

Ich benutze StructureMap, um Abhängigkeit zu lösen, was mit älteren Versionen funktioniert. Aber nach dem Update von StructureMap Version 4.2.0.40, stehe ich vor diesem Fehler.StructureMap: Der Name 'ObjectFactory' existiert nicht im aktuellen Kontext

ObjectFactory ist jetzt in der neuen Version veraltet. So, wie Sie unter Logik ändern, um diese mit der aktualisierten Version anzupassen.

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"); 
      }); 
     } 
    } 
} 

Antwort

2

Sie haben eine eigene Implementierung von ObjectFactory, so etwas wie hinzufügen:

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 
     }); 
    } 
} 

Siehe für weitere Details.

Alternativ können Sie auch eine ältere Version von StructureMap verwenden.