0

ASP.NET MVC 4 RCと の最新バージョンをMvcExtensions使用していMvcExtensions.Autofacます。

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

RegisterRoutesBootstrapperAutoMapperBootstrapperおよびFluentValidationBootstrapper私のカスタム ブートストラップ クラスです。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 参照を要求している理由はありますか?

4

3 に答える 3

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 によって提案された型の読み込みを使用することを検討してください。

于 2012-07-31T19:57:14.643 に答える
0

問題は次の行にあります。

typeof(IEntity).Assembly
    .GetTypes()

ジョン・スキートによるこの回答を参照してください。彼は、なぜこれが発生するのか、そしてそれをどうするのかを説明しています。

また、PhilHaackによる「GetAllTypesinAssembly 」の記事を見ることができます。

于 2012-07-30T11:28:07.037 に答える
0

MvcExtensionsおよびNuGet パッケージは ASP.NET MVC 3 に対してコンパイルされてMvcExtensions.Autofacおり、System.Web.Mvc V3.0.0.0 への強い参照があると思います。それらは ASP.NET MVC 4 と互換性がありません。これらのパッケージの作成者に連絡して、ASP.NET MVC 4 に対してコンパイルされた更新バージョンを提供する必要があります。ASP.NET MVC 4 は RTM にヒットしていないことに注意してください。ただし、すべての NuGet パッケージが更新されたバージョンをすぐに取得できるとは思わないでください。

于 2012-07-27T12:47:21.567 に答える