Как «EnforceConstraints», чтобы избежать ошибок linq? - PullRequest
0 голосов
/ 12 ноября 2009

Я работаю над образцом из книги, которую купил. И по неизвестной причине я получаю следующее сообщение об ошибке « Не удалось найти реализацию шаблона запроса для типа источника« System.Type ».« Где »не найден. "

Справка VS2008 говорит, что мне нужно добавить пространства имен System.Linq и System.Collections, чтобы решить эту проблему. К сожалению, я все еще получаю то же сообщение об ошибке. На форуме MSDN сказано, что мне нужно установить значение EnforceConstraints в true;

Я хотел бы знать, что такое "EnforceConstraints" и как я могу это сделать.

Спасибо.


Вот код

с использованием системы; используя System.Data; используя System.Configuration; использование System.Linq; использование System.Web; использование System.Web.Security; использование System.Web.UI; использование System.Web.UI.HtmlControls; использование System.Web.UI.WebControls; использование System.Web.UI.WebControls.WebParts; использование System.Xml.Linq; использование System.Web.Mvc; используя Castle.Windsor; использование Castle.Windsor.Configuration.Interpreters; использование Castle.Core.Resource; using System.Reflection; используя Castle.Core; using System.Collections;

пространство имен WebUI { открытый класс WindsorControllerFactory: DefaultControllerFactory { Контейнер WindsorContainer;

    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
}

Образец на странице 98.

Книга "Pro ASP.NET MVC Framework" / Стивен Сандерсон / APress ISBN-13 (pbk): 978-1-4302-1007-8

Ответы [ 2 ]

1 голос
/ 12 ноября 2009

В строке:

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

вам не хватает 's' в конце GetTypes(). Это должно решить проблему, так как GetType() возвращает один экземпляр Type, тогда как GetTypes() возвращает массив Type объектов.

1 голос
/ 12 ноября 2009

Это говорит о том, что вы пытаетесь сделать что-то вроде:

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

Нет метода "Select", определенного в System.Type или как метод расширения - в основном Type не является допустимым источником данных для запроса LINQ. Не могли бы вы опубликовать полный пример (и в идеале, из какой книги это происходит)? Это может быть просто опечатка - либо в том, что вы скопировали, либо в самой книге.

РЕДАКТИРОВАТЬ: Теперь вы разместили код (который должен быть в вопросе редактирования, а не ответ, кстати), я вижу, что это просто опечатка. Вместо этого:

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

у вас должно быть

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

Обратите внимание на "s" в конце:)

GetType() возвращает тип объекта (т. Е. typeof(Assembly) или некоторый подкласс), тогда как GetTypes() возвращает коллекцию типов в пределах допустимого. Последнее, безусловно, то, что вы хотите.

...