2015-10-25 98 views
2

我在ASP.MVC 4上配置Autofac時遇到了一些奇怪的錯誤。我在許多其他項目上成功使用過Autofac。這MVC項目是淨4.5.2,我引用來自的NuGet以下Autofac庫:ASP.net MVC 4和Autofac錯誤 - 覆蓋成員時違反了繼承安全規則

Autofac版本3.5.2 =

Autofac.Mvc4版本= 3.1.0

的錯誤我得到的是:

「重寫成員時違反了繼承安全規則:'Autofac.Integration.Mvc.AutofacDependencyResolver.GetService(System.Type)'。覆蓋方法的安全性可訪問性必須匹配方法的安全性可訪問性重寫「。

奇怪的是,我的代碼甚至沒有被稱爲這個錯誤被解僱!我的代碼如下:

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 

     try 
     { 
      AutofacDependencyResolverHelper.RegisterAutofac(); 
     } 
     catch (Exception ex) 
     { 
      Trace.Write(ex.Message); 
      throw; 
     } 

    } 


    public class AutofacDependencyResolverHelper 
{ 
    public static void RegisterAutofac() 
    { 
     var container = GetContainer(); 
     DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 
    } 

    public static IContainer GetContainer() 
    { 
     var assemblies = new List<Assembly>(); 
     assemblies.Add(Assembly.Load("Core.Infrastructure")); 
     assemblies.Add(Assembly.Load("Core.GenericRepository")); 
     assemblies.Add(Assembly.Load("Core.Common")); 
     assemblies.Add(Assembly.Load("CRM.Interfaces")); 
     assemblies.Add(Assembly.Load("CRM.Data")); 
     assemblies.Add(Assembly.Load("CRM.Dtos")); 
     assemblies.Add(Assembly.Load("CRM.Entities")); 
     assemblies.Add(Assembly.Load("CRM.Business")); 

     var builder = new ContainerBuilder(); 
     builder.RegisterAssemblyTypes(assemblies.ToArray()).AsImplementedInterfaces(); 
     builder.RegisterControllers(Assembly.Load("CRM.Web.Mvc4")); 
     var container = builder.Build(); 
     return container; 
    } 
} 

不知道這個錯誤是什麼?任何意見將不勝感激。我已經發現了一些其他的問題,但它們與MVC5:

Solving Autofac issue Inheritance security rules violated while overriding member GetService

全配置更新時間:

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="angularjs.TypeScript.DefinitelyTyped" version="4.2.7" targetFramework="net46" /> 
    <package id="Antlr" version="3.4.1.9004" targetFramework="net46" /> 
    <package id="Autofac" version="3.5.2" targetFramework="net46" /> 
    <package id="Autofac.Mvc4" version="3.1.0" targetFramework="net46" /> 
    <package id="bootstrap" version="3.0.0" targetFramework="net46" /> 
    <package id="jQuery" version="1.10.2" targetFramework="net46" /> 
    <package id="jquery.TypeScript.DefinitelyTyped" version="0.0.1" targetFramework="net46" /> 
    <package id="jQuery.Validation" version="1.11.1" targetFramework="net46" /> 
    <package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net46" /> 
    <package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net46" /> 
    <package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net46" /> 
    <package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net46" /> 
    <package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.3" targetFramework="net46" /> 
    <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net46" /> 
    <package id="Modernizr" version="2.6.2" targetFramework="net46" /> 
    <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net46" /> 
    <package id="Respond" version="1.2.0" targetFramework="net46" /> 
    <package id="WebGrease" version="1.5.2" targetFramework="net46" /> 
</packages> 
+0

你可以顯示整個packages.config嗎? –

+0

嗨,更新上面的帖子與完整.config的詳細信息 – user1829319

回答

0

好吧,發現問題。儘管它是一個MVC4應用程序,但我使用nuget添加了對Autofac MVC5的引用,並解決了這個問題。即:

包ID = 「Autofac.Mvc5」 版本= 「3.3.4」 targetFramework = 「net452」

相反的:

包ID = 「Autofac.Mvc4」 版本=「3.1。 0「targetFramework =」net46「

奇怪,但它的工作!

+0

如果你看看你的MVC參考,它的版本5.2.3 - MVC 5,而不是MVC 4.這就是它被修復的原因。很高興它現在爲你工作! –

相關問題