ViewComponent introuvable après la mise à niveau de Monorail de la v1.0.3 à la v2.1RC

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

  •  28-10-2019
  •  | 
  •  

Question

J'utilise Monorail dans mon application Web C #.Depuis que je l'ai mis à jour (.Net Framework 2 à 4 et Monorail 1.0.3 à 2.1RC), ma classe ViewComponent est introuvable.Tous mes contrôleurs semblent fonctionner correctement.J'utilise nVelocity View Engine.Je n'utilise pas Windsor, mais peut-être que maintenant je suis censé l'enregistrer d'une certaine manière?

Dans le fichier .vm, j'ai expérimenté les lignes suivantes (sans succès, la première fonctionnait avant la mise à jour du projet):

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

Quelqu'un a-t-il expérimenté cela?

Le message d'erreur complet est:

ViewComponent 'MenuComponent' pourrait pas être trouvé.At-il été enregistré?Si vous avez activé l'intégration de Windsor, alors il est probable que vous ayez oublié pour enregistrer le composant de vue en tant que Composante de Windsor.Si vous êtes sûr que vous l'a fait, puis assurez-vous que le nom utilisé est l'id du composant ou la clé passée à ViewComponentDetailsAttribute

Merci beaucoup!

Était-ce utile?

La solution

J'ai enfin trouvé un indice sur mon problème. J'ai utilisé le code source de 'Castle.Monorail.Framework.dll' pour voir ce qui se passe à l'intérieur: il semble que les assemblys spécifiés dans le fichier Web.Config (dans <Controllers> ou même dans <viewcomponents>) ne sont pas `` inspectés '' comme ils sont censés l'être car la variable qui la contient est initialisée trop tard.

J'ai construit une nouvelle version de la DLL et maintenant ça marche bien. Je vais soumettre mon code «corrigé» à la communauté Castle Project pour m'assurer que ce n'est pas la conséquence de quelque chose d'autre (comme de mauvais paramètres).

Jusqu'à ce que voici mon «correctif», je viens de déplacer une partie du code. Vous pouvez trouver le code source original ici: http://www.symbolsource.org/Public/Metadata/Default/Project/Castle/1.0-RC3/Debug/All/Castle.MonoRail.Framework/ Castle.MonoRail.Framework / Services / DefaultViewComponentFactory.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 */
}

Autres conseils

Je suis curieux, sans votre solution, si vous renommez MenuComponent uniquement en Menu, cela fonctionne-t-il?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top