0

私のasp.net-mvcアプリケーションでは、Turbineをセットアップしようとしています。
初期化コードは次のようになります。

public class MvcApplication : TurbineApplication
{
    static MvcApplication()
    {
        ServiceLocatorManager.SetLocatorProvider(() => new UnityServiceLocator());           
    }
}

そして、私は次のようなレジストラのセットを持っています:

public class UserRepositoryRegistration : IServiceRegistration
{
    public void Register(IServiceLocator locator)
    {
        locator.Register<IUserRepository, Db4oUserRepository>();
    }
}

実行しようとすると、SetLocatorProvider の後、登録メソッドに入る前のどこかで次のエラーが発生します。

「/」アプリケーションでサーバー エラーが発生しました。

要求されたタイプの 1 つ以上を読み込めません。詳細については、LoaderExceptions プロパティを取得してください。

説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.Reflection.ReflectionTypeLoadException: 1 つ以上の要求された型を読み込めません。詳細については、LoaderExceptions プロパティを取得してください。

ソース エラー: 現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。

スタックトレース:

    [ReflectionTypeLoadException: 要求されたタイプの 1 つ以上を読み込めません。詳細については、LoaderExceptions プロパティを取得してください。]
       System.Reflection.Module._GetTypesInternal(StackCrawlMark& stackMark) +0
       System.Reflection.Assembly.GetTypes() +105
       MvcTurbine.ComponentModel.DefaultAutoRegistrator.AutoRegister(ServiceRegistration サービス登録) +338
       MvcTurbine.Web.RotorContext.ProcessAutomaticRegistration(AutoRegistrationList registrationList) +155
       MvcTurbine.Web.RotorContext.AutoRegistrationForContext() +163
       MvcTurbine.Web.RotorContext.Turn() +37
       MvcTurbine.Web.TurbineApplication.ExecuteContext() +43
       MvcTurbine.Web.TurbineApplication.TurnRotor() +65
       MvcTurbine.Web.TurbineApplication.Application_Start(オブジェクト送信者、EventArgs e) +85

更新
問題のライブラリを Db4objects.Db4o.Linq.dll に絞り込みました。mvc webapplication で参照されているライブラリの 1 つで、このライブラリを参照として (「使用」していなくても、参照に追加しただけで) 取得するとすぐに、上記のYSOD。他のすべての Db4o ライブラリーは問題なく動作します。

METTRE À JOUR
UnityServiceLocator を WindsosServiceLocator および NinjectServiceLocator と交換しようとしました。まったく同じ結果になるため、問題はどちらのライブラリにも起因しない可能性が高くなります。

OPPDATERING
エラー ページを再作成するには、次の手順を実行するだけで十分です。

  • 新しい Mvc アプリケーションを作成します (wat バージョンは関係ありません)
  • MvcTurbine を使用するように global.asax.cs コードを変更し、必要な MvcTurbine ライブラリを追加します
  • Db4objects.Db4o.dll を追加
    します。
  • Db4objects.Db4o.linq.dll
    YSODを追加

これをどこでどのようにデバッグするかについてのアイデアはありますか?

4

4 に答える 4

3

適切な答えを書き留めるために。Db4objects.Db4o.Linqによって参照されるアセンブリの読み込みに失敗すると、TypeLoadExceptionが発生すると思います。

ildasmでそれを見ると、db4oに付属している次のアセンブリが必要であることがわかります(不一致を避けるために、Db4objects.Db4o.Linqに付属しているものと同じアセンブリを使用してください)。

それらのアセンブリは次のとおりです。

  • Mono.Cecil
  • Cecil.FlowAnalysis

ちなみに、今日の時点で、これらはLINQ to db4oクエリオプティマイザによって使用され、linqクエリのプロパティアクセスを分析します。

于 2009-12-05T12:34:38.493 に答える
2

Turbine が型を登録するには、ホスティング アセンブリ (Db4objects.Db4o.Linq) と、ホスティング アセンブリが参照するその他のアセンブリが必要です。

元の投稿のスタック トレースは、アプリケーションの型を解決しようとしたときに何かが解決できなかったことを示しています。この場合、それは存在しません。

于 2009-12-06T06:10:21.020 に答える
0

ジェフ、MVC Turbine は現在 MVC 1.0 のみをサポートしています。.NET 3.5 と .NET 4.0 の両方で MVC 2.0 をサポートするように取り組んでいます。いつリリースされるかについては、http://turbineproject.comを確認してください。

于 2009-12-06T06:13:40.733 に答える
0

ターゲットタイプに問題があるようです。次のことを試してみてください。

  1. すべてのサービス登録を削除し、一度に 1 つずつ試して、問題の原因となっているタイプを特定します。
  2. 自分でターゲット タイプを正常にインスタンス化できることを確認します。
  3. 対象の型に、サービス登録で説明されていない他の依存関係がないことを確認してください。

ターゲット型の宣言とコンストラクターを確認すると役立ちます。

別の IoC コンテナーに切り替えてみます。

MvcTurbine.Ninject.dll への参照を追加します。

それで:

public class MvcApplication : TurbineApplication
{
    static MvcApplication()
    {
        //ServiceLocatorManager.SetLocatorProvider(() => new UnityServiceLocator());           
        ServiceLocatorManager.SetLocatorProvider(() => new NinjectServiceLocator()); 
    }
}
于 2009-12-03T16:29:03.657 に答える