visecomponent v1.0.3からv2.1rcにモノレールをアップグレードした後に見つかりません

StackOverflow https://stackoverflow.com/questions/6372752

  •  28-10-2019
  •  | 
  •  

質問

C#Webアプリケーションでモノレールを使用しています。私はそれをアップグレートしたので(.NETフレームワーク2から4、モノレール1.0.3から2.1RC)、私のViewComponentクラスは見つかりませんでした。すべてのコントローラーは正常に動作しているようです。 NVelocity View Engineを使用しています。私はウィンザーを使用していませんが、多分今は特定の方法で登録すると思いますか?

.VMファイルでは、次の行を実験しました(成功せずに、プロジェクトをアップグレードする前に最初の行は機能していました):

 #component(MenuComponent)
 #component(MenuComponent with "role=admins")
 #blockcomponent(MenuComponent with "role=admins")

誰かがそれを実験しましたか?

完全なエラーメッセージは次のとおりです。

ViewComponent「Menucomponent」は見つかりませんでした。登録されましたか? Windsorの統合を有効にしている場合、Windsorコンポーネントとしてビューコンポーネントを登録するのを忘れている可能性があります。あなたがそれをしたと確信している場合は、使用されている名前がコンポーネントIDであるか、viewComponentDetailSattributeに渡されたキーであることを確認してください

どうもありがとう!

役に立ちましたか?

解決

私はついに自分の問題の手がかりを見つけました。 「castle.monorail.framework.dll」ソースコードを使用して、内部で何が起こるかを確認します。 <Controllers> またはでさえ <viewcomponents>)、それを含む変数が初期化されているためであるため、「検査」されていません。

私はDLLの新しいバージョンを構築しましたが、今では正常に動作しています。 「固定」コードをCastle Projectコミュニティに送信して、それが他の何かの結果ではないことを確認します(悪い設定など)。

次に、ここに私の「修正」があり、コードの一部を移動しました。元のソースコードはこちらから見つけることができます。 http://www.symbolsource.org/public/metadata/default/project/castle/1.0-rc3/debug/all/castle.monorail.framework/castle.monorail.framework/services/defaultviewcomonedfactory.cs

*Assembly:* Castle.MonoRail.Framework
*Class:* Castle.MonoRail.Framework.Services.**DefaultViewComponentFactory**


public override void Service(IServiceProvider provider)
{
  /* Here is the section I moved */
  var config = (IMonoRailConfiguration)provider.GetService(typeof(IMonoRailConfiguration));
  if (config != null)
  {
    assemblies = config.ViewComponentsConfig.Assemblies;
    if (assemblies == null || assemblies.Length == 0)
    {
      // Convention: uses the controller assemblies in this case
      assemblies = config.ControllersConfig.Assemblies.ToArray();
    }
  }
  /*******************************/

  base.Service(provider); // Assemblies inspection is done there

  var loggerFactory = (ILoggerFactory) provider.GetService(typeof(ILoggerFactory));
  if (loggerFactory != null)
  {
    logger = loggerFactory.Create(typeof(DefaultViewComponentFactory));
  }
  /* The moved section was here */
}

他のヒント

私は興味があります、あなたの修正なしで、あなたがメニューコンポーネントを単なるメニューに変更した場合、それは機能しますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top