2012-07-27 56 views
0

我正在使用ASP.NET MVC 4 RC以及最新版本的MvcExtensionsMvcExtensions.AutofacAutomapper使用MvcExtensions在MVC4應用程序中詢問MVC3參考

我不知道MVC 4是否與MVC 3的工作方式不同?下面的代碼是我在MVC 3應用程序中使用它的方式。我剛剛複製並粘貼到我的MVC 4應用程序。

我取代的Global.asax.cs文件看起來像這樣:

public class MvcApplication : AutofacMvcApplication 
{ 
    public MvcApplication() 
    { 
      Bootstrapper.BootstrapperTasks 
       .Include<RegisterAreas>() 
       .Include<RegisterControllers>() 
       .Include<RegisterRoutesBootstrapper>() 
       .Include<AutoMapperBootstrapper>() 
       .Include<FluentValidationBootstrapper>(); 
    } 

    protected override void OnStart() 
    { 
      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 

      base.OnStart(); 
    } 
} 

RegisterRoutesBootstrapperAutoMapperBootstrapperFluentValidationBootstrapper是我的自定義引導程序類。對於AutoMapperBootstrapper的代碼看起來是這樣的:

public class AutoMapperBootstrapper : BootstrapperTask { 
    public override TaskContinuation Execute() 
    { 
      const string mappingNamespace = "MyProject.DomainModel.Mappings"; 

      IEnumerable<Type> mappingTypes = typeof(IEntity).Assembly 
       .GetTypes() 
       .Where(
        type => 
        type.IsPublic && 
        type.IsClass && 
        !type.IsAbstract && 
        !type.IsGenericType && 
        type.Namespace == mappingNamespace); 

      mappingTypes.ForEach(t => Activator.CreateInstance(t)); 

      return TaskContinuation.Continue; 
    } } 

它在藍色下劃線的IEnumerable出現錯誤:

The type 'System.Web.Mvc.Controller' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. 

好了,所以,當我編譯我的項目是尋找一個ASP.NET MVC 3參考:

The type 'System.Web.Mvc.IViewPageActivator' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. There about 10 such errors relating to the AutoMapperBootstrapper.cs file. 

我沒有打擾這個參考,並添加了MVC 4參考。我認爲這會解決我的地區問題,但事實並非如此。

任何想法,爲什麼它要求的MVC參考?

回答

0

我猜MvcExtensions和NuGet包是針對ASP.NET MVC 3編譯的,並且對System.Web.Mvc V3.0.0.0有強烈的引用。它們與ASP.NET MVC 4不兼容。您將不得不聯繫這些包的作者,以向您提供針對ASP.NET MVC 4編譯的更新版本。請記住,ASP.NET MVC 4尚未達到RTM但是,所以不要指望所有的Nu​​Get包都立即獲得更新版本。

+0

排除綁定重定向的任何特定原因能夠解決手頭的問題? Ninject.Web和東西恰好工作(或者我感到困惑,只是Ninject.MVC3位源代碼...)? (我知道一個答案,說「只使用綁定Reidrects」而沒有任何資格,肯定也是錯誤的......) – 2012-07-27 20:49:36

1

添加綁定重定向應該幫助你。添加至少以下重定向:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
     <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
    </dependentAssembly> 
    <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
    </dependentAssembly> 
    <dependentAssembly> 
     <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
    </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

另外,考慮使用由hazzik建議的類型加載。