Ho un controller API Web con alcune risorse DI'd. Per necessità successive ho aggiunto un controller MVC, ora ho bisogno delle stesse risorse DI'd anche lì. Qui è la mia configurazione originale:Inizializzazione di Simple Injector per entrambi i controller API MVC e Web
[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);
}
}
}
Posso registrare DI per MVC controller nello stesso posto così? Posso riutilizzare il contenitore?
Aggiornamento: Devo essere vicino, ma ora ho un errore nel controller API Web che mi serve un costruttore senza parametri; Ho provato ad aggiungere, ma poi nulla viene iniettato naturalmente
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);
}
}
Grazie per la risposta rapida, ho quasi dovuto farlo funzionare, si può vedere il mio aggiornamento? – FailedUnitTest
@FailedUnitTest è necessario * entrambi * i resolver di dipendenza. Quindi anche il resolver di dipendenze API Web. – Steven
Questo l'ha risolto, grazie Steven! – FailedUnitTest