visecomponent v1.0.3からv2.1rcにモノレールをアップグレードした後に見つかりません
-
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 */
}
他のヒント
私は興味があります、あなたの修正なしで、あなたがメニューコンポーネントを単なるメニューに変更した場合、それは機能しますか?