2012-04-18 2 views
8

Ich versuche, den HttpSelfHostServer zu verwenden, um selbst eine ASP.NET MVC 4 WebAPI zu hosten. Alles ist gut util Ich versuche, einen benutzerdefinierten Abhängigkeits-Resolver hinzuzufügen. (Letztendlich wird dies StructureMap verwenden, aber ich habe diesen Punkt noch nicht erreicht). Wenn ich versuche, einen benutzerdefinierten Resolver zu instanziiert, erhalte ich die folgende Ausnahme, wenn Sie den Server starten:"Vererbung Sicherheitsregeln verletzt" bei der Verwendung von HttpSelfHostServer und IDependencyResolver

Type: Regeln Inheritance Sicherheit nach Art verletzt: ‚System.Web.Mvc.CompareAttribute‘. Abgeleitete Typen müssen entweder der Sicherheitsverfügbarkeit des Basistyps entsprechen oder weniger zugänglich sein.

Der Code ist wie folgt:

public class CustomDependencyResolver : IDependencyResolver 
{ 
    public object GetService(Type serviceType) 
    { 
     return null; 
    } 

    public IEnumerable<object> GetServices(Type serviceType) 
    { 
     return null; 
    } 
} 

... 

// To trigger the exception, all I need to do is instantiate the custom resolver. 
var dependencyResolver = new CustomDependencyResolver(); 

// Exception is thrown when I create the server: 
var server = new HttpSelfHostServer(_config); 

Bitte beachte, dass ich habe nichts mit dem Resolver zu tun - später es einfa ist, y die Handlung es instanziieren, die den Ausfall auslöst.

Seltsamerweise passiert diese Ausnahme nur im Debug (F5) - wenn ich über Strg + F5 laufe, funktioniert alles gut.

Haben Sie irgendwelche Gedanken, wie Sie dieses Problem lösen können?

Stacktrace:

mscorlib.dll!System.Reflection.RuntimeAssembly.GetExportedTypes() + 0x27 bytes 
System.Web.Http.dll!System.Web.Http.Dispatcher.HttpControllerTypeCacheUtil.FilterTypesInAssemblies(System.Web.Http.Dispatcher.IBuildManager buildManager, System.Predicate<System.Type> predicate) + 0x104 bytes  
System.Web.Http.dll!System.Web.Http.Dispatcher.HttpControllerTypeCacheUtil.GetFilteredTypesFromAssemblies(string cacheName, System.Predicate<System.Type> predicate, System.Web.Http.Dispatcher.IBuildManager buildManager) + 0x76 bytes  
System.Web.Http.dll!System.Web.Http.Dispatcher.HttpControllerTypeCache.InitializeCache() + 0x58 bytes 
System.Web.Http.dll!System.Web.Http.Dispatcher.HttpControllerTypeCache.HttpControllerTypeCache(System.Web.Http.HttpConfiguration configuration) + 0x96 bytes  
System.Web.Http.dll!System.Web.Http.Dispatcher.DefaultHttpControllerFactory.DefaultHttpControllerFactory(System.Web.Http.HttpConfiguration configuration) + 0x96 bytes 
System.Web.Http.dll!System.Web.Http.Services.DefaultServiceResolver..ctor.AnonymousMethod__0(System.Web.Http.HttpConfiguration config) + 0x30 bytes 
System.Web.Http.dll!System.Web.Http.Services.DefaultServiceResolver.GetService(System.Type t) + 0x57 bytes 
System.Web.Http.dll!System.Web.Http.Services.DependencyResolver.GetService(System.Type serviceType) + 0xd3 bytes  
System.Web.Http.dll!System.Web.Http.DependencyResolverExtensions.GetService<System.Web.Http.Dispatcher.IHttpControllerFactory>(System.Web.Http.Services.DependencyResolver resolver) + 0x6a bytes 
System.Web.Http.dll!System.Web.Http.DependencyResolverExtensions.GetServiceOrThrow<System.Web.Http.Dispatcher.IHttpControllerFactory>(System.Web.Http.Services.DependencyResolver resolver) + 0x5b bytes  
System.Web.Http.dll!System.Web.Http.DependencyResolverExtensions.GetHttpControllerFactory(System.Web.Http.Services.DependencyResolver resolver) + 0x25 bytes  
System.Web.Http.dll!System.Web.Http.Dispatcher.HttpControllerDispatcher.HttpControllerDispatcher(System.Web.Http.HttpConfiguration configuration) + 0x77 bytes 
System.Web.Http.SelfHost.dll!System.Web.Http.SelfHost.HttpSelfHostServer.HttpSelfHostServer(System.Web.Http.SelfHost.HttpSelfHostConfiguration configuration) + 0x62 bytes 
WebApi.Host.dll!My.WebApi.Host.Server.Listen() Line 33 + 0x1b bytes C# 
Services.TrialBalance.TestHarness.exe!Digita.AccountsPro.Services.TrialBalance.TestHarness.Program.Main() Line 21 + 0xa bytes C# 
[Native to Managed Transition] 
[Managed to Native Transition] 
mscorlib.dll!System.AppDomain.ExecuteAssembly(string assemblyFile, System.Security.Policy.Evidence assemblySecurity, string[] args) + 0x6d bytes  
Microsoft.VisualStudio.HostingProcess.Utilities.dll!Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() + 0x2a bytes 
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_Context(object state) + 0x63 bytes 
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool ignoreSyncCtx) + 0xb0 bytes  
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) + 0x2c bytes  
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart() + 0x44 bytes 
[Native to Managed Transition] 
+0

Was ist der Stack-Trace? – SLaks

+0

Update: Ich muss nicht einmal einen benutzerdefinierten Abhängigkeits-Resolver erstellen, nur 'var type = typeof (IDependencyResolver);' löst diesen Fehler aus. – stusmith

Antwort

5

Schließlich die Antwort gefunden; also beantworte ich meine eigene Frage.

Es gibt zwei IDependencyResolver: eine in System.Web.Http.Services, und eine in System.Web.Mvc.

Beide kompilieren und in non-debug ausgeführt werden.

System.Web.Http.Services.IDependencyResolverist die richtige.

System.Web.Mvc.IDependencyResolver scheint Probleme zu verursachen.

+0

Das war eine große Überraschung für mich :) –

+0

+1. Willkommen in den parallelen Welten :) – Aliostad

+1

Ich stehe vor diesem Problem, wenn ich versuche, HttpSelfHostServer zu verwenden. Es scheint die gleiche IDEpendencyResolver-ID zu sein, die von der HttpConfiguration-Klasse verwendet wird. Aber ich erstelle keinen eigenen benutzerdefinierten DependencyResolver. Irgendwelche Ideen? –