2009-11-12 3 views
0

Je travaille sur un échantillon du livre que j'ai acheté. Et, pour une raison inconnue, je reçois le message d'erreur suivant « Impossible de trouver une implémentation du modèle de requête pour le type de source « System.Type ». 'Où est introuvable. »Comment "EnforceConstraints" pour éviter les erreurs de linq?

L'aide VS2008 dit que je besoin d'ajouter les espaces de noms System.Linq et System.Collections pour résoudre le problème. Malheureusement, j'ai toujours le même message d'erreur. Dans le forum MSDN, il est dit que j'ai besoin de définir EnforceConstraints à true;

Je voudrais savoir ce qu'est "EnforceConstraints" et comment puis-je le faire.

Merci.


Voici le code

using System; en utilisant System.Data; en utilisant System.Configuration; en utilisant System.Linq; en utilisant System.Web; en utilisant System.Web.Security; en utilisant System.Web.UI; en utilisant System.Web.UI.HtmlControls; en utilisant System.Web.UI.WebControls; en utilisant System.Web.UI.WebControls.WebParts; en utilisant System.Xml.Linq; en utilisant System.Web.Mvc; en utilisant Castle.Windsor; en utilisant Castle.Windsor.Configuration.Interpreters; en utilisant Castle.Core.Resource; en utilisant System.Reflection; en utilisant Castle.Core; en utilisant System.Collections;

espace de noms WebUI { public class WindsorControllerFactory: DefaultControllerFactory { WindsorContainer conteneur;

public WindsorControllerFactory() 
    { 
     //Instatiate a container, taking configuration from web.conf 
     Container = new WindsorContainer(
      new XmlInterpreter(new ConfigResource("Castle")) 
      ); 

     //Also register all the controller types as transient 
     var controllerTypes = 
      from t in Assembly.GetExecutingAssembly().GetType() 
      where typeof(IController).IsAssignableFrom(t) 
      select t; 
     foreach (Type t in controllerTypes) 
      Container.AddComponentWithLifestyle(t.FullName, t, LifestyleType.Transient); 
     } 

     //Constructs the controller instance needed to service each request 
    protected override IController GetControllerInstance(Type controllerType) 
    { 
     return (IController)Container.Resolve(controllerType); 
    }  

    }//The constructor 
} 

L'échantillon est à la page 98.

le livre est "Pro ASP.NET MVC Framework"/Steven Sanderson/AAppuyez ISBN-13 (PBK): 978-1-4302- 1007-8

+0

Pouvez-vous poster l'exemple de code? – Konamiman

Répondre

1

Dans la ligne:

from t in Assembly.GetExecutingAssembly().GetType() 

vous manque un 's' à la fin de GetTypes(). Cela devrait résoudre le problème, car GetType() renvoie une seule instance Type, tandis que GetTypes() renvoie un tableau d'objets Type.

1

Que vous suggère vous essayez de faire quelque chose comme:

Type type = typeof(int); 
var methods = from method in type 
       select method; 

Il n'y a pas la méthode « Select » défini dans System.Type ou comme une méthode d'extension - fondamentalement un Type n'est pas une source de données valide pour une requête LINQ. Pourriez-vous poster l'exemple complet (et idéalement de quel livre il provient)? Il peut s'agir simplement d'une faute de frappe - soit dans ce que vous avez copié ou dans le livre lui-même.

EDIT: Maintenant vous avez posté le code (qui devrait être dans une édition de question, pas une réponse btw) Je peux voir que c'est juste une faute de frappe. Au lieu de cela:

from t in Assembly.GetExecutingAssembly().GetType() 

vous devriez avoir

from t in Assembly.GetExecutingAssembly().GetTypes() 

Notez le "s" à la fin :)

GetType() renvoie le type de l'objet (à savoirtypeof(Assembly) ou une certaine sous-classe) tandis que GetTypes() renvoie la collection de types au sein de l'assmeable. Ce dernier est définitivement ce que vous voulez.

+0

Merci beaucoup (pour tout, y compris comment poser et éditer des questions) – Richard77

Questions connexes