2012-04-18 19 views
8

Estoy intentando utilizar HttpSelfHostServer para autoevaluar ASP.NET MVC 4 WebAPI. Todo está bien util. Trato de agregar un solucionador de dependencias personalizado. (En última instancia, esto utilizará StructureMap, pero aún no he llegado a ese punto). Si trato de crear una instancia de una resolución personalizada, tengo la siguiente excepción al iniciar el servidor:"Se han infringido las normas de seguridad de herencia" al usar HttpSelfHostServer y IDependencyResolver

TypeLoadException: normas de seguridad de herencia violados por tipo: 'System.Web.Mvc.CompareAttribute'. Los tipos derivados deben coincidir con la accesibilidad de seguridad del tipo base o ser menos accesibles.

El código es el siguiente:

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); 

Tenga en cuenta que no tengo nada que ver con el sistema de resolución - que es simp, y el acto de crear instancias que lo que desencadena el fracaso posterior.

Curiosamente, esta excepción solo ocurre en la depuración (F5) - si ejecuto mediante Ctrl + F5, todo funciona bien.

¿Alguna idea sobre cómo resolver este problema?

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

¿Cuál es el seguimiento de la pila? – SLaks

+0

Actualización: ni siquiera necesito crear una resolución de dependencias personalizada, simplemente haciendo 'var type = typeof (IDependencyResolver); 'desencadena este error. – stusmith

Respuesta

5

Finalmente encontró la respuesta; por lo tanto, respondiendo mi propia pregunta.

Resulta que hay dos IDependencyResolver: uno en System.Web.Http.Services, y uno en System.Web.Mvc.

Ambos compilan y ejecutan sin depuración.

System.Web.Http.Services.IDependencyResolveres el correcto.

System.Web.Mvc.IDependencyResolver parece causar problemas.

+0

Eso fue una gran sorpresa para mí también :) –

+0

+1. Bienvenido a los mundos paralelos :) – Aliostad

+1

Me enfrento a este problema cuando trato de usar HttpSelfHostServer. Parece el mismo Id IDependencyResolver utilizado por la clase HttpConfiguration. Pero no estoy creando mi propio DependencyResolver personalizado. ¿Algunas ideas? –

Cuestiones relacionadas