Sto utilizzando la seguente classe come resolver di dipendenze. Ottenuto riferimento dal http://www.asp.net/web-api/overview/advanced/dependency-injectionErrori durante l'utilizzo del resolver di dipendenze personalizzato con Unity e controller API Web
public class UnityWebAPIResolver : IDependencyResolver
{
protected IUnityContainer container;
public UnityWebAPIResolver(IUnityContainer container)
{
if (container == null)
{
throw new ArgumentNullException("container");
}
this.container = container;
}
public object GetService(Type serviceType)
{
try
{
return container.Resolve(serviceType); **// This line throws error**
}
catch (ResolutionFailedException)
{
return null;
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return container.ResolveAll(serviceType); **// This line throws error**
}
catch (ResolutionFailedException)
{
return new List<object>();
}
}
public IDependencyScope BeginScope()
{
var child = container.CreateChildContainer();
return new UnityWebAPIResolver(child);
}
public void Dispose()
{
container.Dispose();
}
}
In classe WebApiConfig dopo la configurazione percorso Sto configurando dipendenza risolutore come questo
config.DependencyResolver = new UnityWebAPIResolver(UnityConfig.GetContainer());
Il problema è che sto ottenendo diversi errori come questo ..
InvalidOperationException - The type IHostBufferPolicySelector does not have an accessible constructor.
InvalidOperationException - The type ModelMetadataProvider does not have an accessible constructor.
InvalidOperationException - The type ITraceManager does not have an accessible constructor.
InvalidOperationException - The type ITraceWriter does not have an accessible constructor.
InvalidOperationException - The type IHttpControllerSelector does not have an accessible constructor.
InvalidOperationException - The type IAssembliesResolver does not have an accessible constructor.
InvalidOperationException - The type IHttpControllerTypeResolver does not have an accessible constructor.
InvalidOperationException - The type IHttpActionSelector does not have an accessible constructor.
InvalidOperationException - The type IActionValueBinder does not have an accessible constructor.
InvalidOperationException - The type IContentNegotiator does not have an accessible constructor.
InvalidOperationException - The type IHttpControllerActivator does not have an accessible constructor.
InvalidOperationException - The type IBodyModelValidator does not have an accessible constructor.
Anche se provo a fare qualcosa del genere nel mio global.asax sto ricevendo gli stessi errori.
GlobalConfiguration.Configuration.DependencyResolver = new UnityWebAPIResolver(UnityConfig.GetContainer());
Domanda: Tutte le dipendenze nel mio controller API sembra essere iniettato correttamente, la mia unica preoccupazione è dato che non è possibile risolvere molti dei sopra menzionati (quadro specifico) tipi, c'è qualche possibilità che può causare l'intero malfunzionamento della struttura e generare errori casuali?
Devi mappare i tipi personalizzati ad un certo punto, non è magicamente fatto per te. Hai un 'Unity.config' che lo fa? – Haney
Sì, tutti i miei tipi personalizzati sono mappati e non lanciano alcun errore sui miei tipi personalizzati ... Genera solo errori per i tipi di framework MVC che non sono registrati nel mio contenitore .. – ATHER
Ahh sì, ho avuto questo problema di nuovo anche il giorno. L'ho risolto ma dovrò guardare il mio codice sorgente per scoprire come. Dammi un paio d'ore e posterò una risposta. :) – Haney