Ich habe einen Web-API-Controller, der einige Ressourcen DI'd hat. Aus späterer Notwendigkeit habe ich einen MVC-Controller hinzugefügt, jetzt brauche ich dieselben Ressourcen auch dort. Hier ist meine ursprüngliche Konfiguration:Simple Injector initialisieren für MVC- und Web-API-Controller
[assembly: WebActivator.PostApplicationStartMethod(typeof(CineplexSearch.App_Start.SimpleInjectorWebApiInitializer), "Initialize")]
namespace CineplexSearch.App_Start
{
using System.Web.Http;
using SimpleInjector;
using SimpleInjector.Integration.WebApi;
public static class SimpleInjectorWebApiInitializer
{
/// <summary>Initialize the container and register it as Web API Dependency Resolver.</summary>
public static void Initialize()
{
var container = new Container();
container.Options.DefaultScopedLifestyle = new WebApiRequestLifestyle();
InitializeContainer(container);
container.RegisterWebApiControllers(GlobalConfiguration.Configuration);
container.Verify();
GlobalConfiguration.Configuration.DependencyResolver =
new SimpleInjectorWebApiDependencyResolver(container);
}
private static void InitializeContainer(Container container)
{
container.Register<ICachingManager, CachingManager>(Lifestyle.Transient);
container.Register<IDataAccessLayer, DataAccessLayer>(Lifestyle.Transient);
}
}
}
Kann ich DI für MVC Controller an der gleichen Stelle auch registrieren? Kann ich den Container wiederverwenden?
Update: Ich muss schließen, aber jetzt bekomme ich einen Fehler in der Web-API-Controller, die ich brauche einen parameterlosen Konstruktor; Ich habe versucht, das Hinzufügen, aber dann wird nichts injiziert natürlich
public static class SimpleInjectorWebApiInitializer
{
/// <summary>Initialize the container and register it as Web API Dependency Resolver.</summary>
public static void Initialize()
{
var container = new Container();
container.Options.DefaultScopedLifestyle = new WebRequestLifestyle();
InitializeContainer(container);
container.RegisterWebApiControllers(GlobalConfiguration.Configuration);
container.RegisterMvcControllers(Assembly.GetExecutingAssembly());
container.Verify();
//GlobalConfiguration.Configuration.DependencyResolver = new SimpleInjectorWebApiDependencyResolver(container);
DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
}
private static void InitializeContainer(Container container)
{
container.Register<ICachingManager, CachingManager>(Lifestyle.Transient);
container.Register<IDataAccessLayer, DataAccessLayer>(Lifestyle.Transient);
}
}
Dank für die schnelle Antwort, ich fast es habe arbeiten, können Sie meine Update finden Sie? – FailedUnitTest
@FailedUnitTest Sie benötigen * beide * die Abhängigkeit Resolver. Also auch der Web-API-Abhängigkeits-Resolver. – Steven
Das hat es repariert, danke Steven! – FailedUnitTest