Итак, у меня есть проект ASP.NET MVC/WebAPI 2, ориентированный на .NET framework 4.5.2, и я пытаюсь использовать SimpleInjector
(DI) с одним и тем же контейнером для контроллеров MVC и контроллеров WebAPI, и я делал это раньше без проблем .
Во время выполнения, когда я пытаюсь создать экземпляр своего SimpleInjectorWebApiDependencyResolver
, я получаю исключение:
public static void Initialize()
{
var container = new Container();
InitializeContainer(container);
container.Verify();
DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver = new SimpleInjectorWebApiDependencyResolver(container); //Exception thrown here
}
Исключение:
An exception of type 'System.TypeAccessException' occurred in MyAssembly.dll but was not handled in user code
Additional information: Attempt by security transparent method 'System.Web.Http.GlobalConfiguration.get_Configuration()' to access security critical type 'System.Web.Http.HttpConfiguration' failed.
My packages.config
:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Antlr" version="3.4.1.9004" targetFramework="net452" />
<package id="bootstrap" version="3.0.0" targetFramework="net452" />
<package id="jQuery" version="1.10.2" targetFramework="net452" />
<package id="jQuery.Validation" version="1.11.1" targetFramework="net452" />
<package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.OData" version="5.7.0" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Tracing" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net452" />
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" />
<package id="Microsoft.Data.Edm" version="5.6.2" targetFramework="net452" />
<package id="Microsoft.Data.OData" version="5.6.2" targetFramework="net452" />
<package id="Microsoft.Data.Services.Client" version="5.6.2" targetFramework="net452" />
<package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="2.19.208020213" targetFramework="net452" />
<package id="Microsoft.IdentityModel.Protocol.Extensions" version="1.0.0" targetFramework="net452" />
<package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.3" targetFramework="net452" />
<package id="Microsoft.Net.Compilers" version="1.0.0" targetFramework="net452" developmentDependency="true" />
<package id="Microsoft.Owin" version="3.0.1" targetFramework="net452" />
<package id="Microsoft.Owin.Host.SystemWeb" version="3.0.1" targetFramework="net452" />
<package id="Microsoft.Owin.Security" version="3.0.1" targetFramework="net452" />
<package id="Microsoft.Owin.Security.Cookies" version="3.0.1" targetFramework="net452" />
<package id="Microsoft.Owin.Security.OpenIdConnect" version="3.0.1" targetFramework="net452" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net452" />
<package id="Microsoft.WindowsAzure.ConfigurationManager" version="2.0.3" targetFramework="net452" />
<package id="Modernizr" version="2.6.2" targetFramework="net452" />
<package id="Newtonsoft.Json" version="6.0.4" targetFramework="net452" />
<package id="Owin" version="1.0" targetFramework="net452" />
<package id="Respond" version="1.2.0" targetFramework="net452" />
<package id="SimpleInjector" version="3.1.1" targetFramework="net452" />
<package id="SimpleInjector.Extensions.ExecutionContextScoping" version="3.1.1" targetFramework="net452" />
<package id="SimpleInjector.Integration.Web" version="3.1.1" targetFramework="net452" />
<package id="SimpleInjector.Integration.Web.Mvc" version="3.1.1" targetFramework="net452" />
<package id="SimpleInjector.Integration.WebApi" version="3.1.1" targetFramework="net452" />
<package id="System.IdentityModel.Tokens.Jwt" version="4.0.0" targetFramework="net452" />
<package id="System.IdentityModel.Tokens.ValidatingIssuerNameRegistry" version="4.5.1" targetFramework="net452" />
<package id="System.Spatial" version="5.6.2" targetFramework="net452" />
<package id="WebGrease" version="1.5.2" targetFramework="net452" />
<package id="WindowsAzure.Storage" version="4.3.0" targetFramework="net452" />
</packages>
Я полностью застрял, насколько я вижу, я ссылаюсь на правильные версии, номера версий верны в элементах DependentAssembly
в моем файле web.config, System.Web.Http
ссылается на v5.2.3.0, и у меня есть попытался удалить все пакеты, bin, obj и пересобрать.
Я прочитал и попробовал WebAPI OData 5.0 Beta — Access GlobalConfiguration выдает ошибку безопасности и Как устранить ошибку. Попытка с помощью прозрачного метода безопасности "System.Web.Http.GlobalConfiguration.get_Configuration() не увенчалась успехом.
Что вызывает эту ошибку и как я могу ее исправить?
securityPolicy
, но по умолчанию полный, не так ли? - person Marcus   schedule 02.12.2015securityPolicy
в частичное по ошибке, кроме добавления элемента в web.config? - person Marcus   schedule 02.12.2015Microsoft.AspNet.WebApi.WebHost
, как описано здесь: stackoverflow.com/a/26002407/1376691 Но я бы все равно хотелось бы знать, почему это произошло. - person Marcus   schedule 02.12.2015