Ich verwende folgende Klasse als Abhängigkeits-Resolver. Got Referenz von http://www.asp.net/web-api/overview/advanced/dependency-injectionFehler bei der Verwendung benutzerdefinierter Abhängigkeitsauflösungsdienste mit dem Unity- und Web-API-Controller
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 WebApiConfig Klasse nach Route Konfiguration i Abhängigkeitsauflöser wie diese
config.DependencyResolver = new UnityWebAPIResolver(UnityConfig.GetContainer());
Das Problem ist, ich bin immer mehrere Fehler wie diese ..
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.
bin Konfiguration Auch wenn ich in meinem global.asax so etwas versuche, bekomme ich dieselben Fehler.
GlobalConfiguration.Configuration.DependencyResolver = new UnityWebAPIResolver(UnityConfig.GetContainer());
Frage: Alle Abhängigkeiten in mein API-Controller injiziert zu sein scheint richtig, meine einzige Sorge ist, da es nicht von oben erwähnt mehrere lösen können (Rahmen spezifisch) Arten, gibt es eine Chance, dass Es kann dazu führen, dass das gesamte Framework fehlerhaft funktioniert und zufällige Fehler generiert.
Sie müssen die benutzerdefinierten Typen irgendwann zuordnen, es ist nicht magisch für Sie gemacht. Haben Sie eine 'Unity.config' Funktion? – Haney
Ja alle meine benutzerdefinierten Typen sind zugeordnet und es werden keine Fehler auf meine benutzerdefinierten Typen geworfen ... Es werden nur Fehler für MVC-Framework-Typen ausgegeben, die nicht in meinem Container registriert sind. – ATHER
Ahh ja, ich hatte dieses Problem zurück der Tag auch. Ich habe es behoben, aber ich muss mir meinen Quellcode ansehen, um herauszufinden, wie. Gib mir ein paar Stunden und ich werde eine Antwort schreiben. :) – Haney