如何“EnforceConstraints”来避免linq错误?

时间:2009-11-12 10:46:29

标签: c# linq visual-studio-2008 system.type

我正在处理我买的书中的样本。并且,由于未知原因,我收到以下错误消息“无法找到源类型'System.Type'的查询模式的实现。''找不到的地方。

VS2008帮助说我需要添加System.Linq和System.Collections命名空间来解决问题。不幸的是,我仍然得到相同的错误消息。在MSDN论坛中,它说我需要将EnforceConstraints设置为true;

我想知道什么是“EnforceConstraints”,我该怎么做。

感谢。


这是代码

使用System; 使用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; 使用System.Reflection; 使用Castle.Core; 使用System.Collections;

命名空间WebUI {     public class 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”/ Steven Sanderson / APress ISBN-13(pbk):978-1-4302-1007-8

2 个答案:

答案 0 :(得分:1)

这表明你正在尝试做类似的事情:

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

System.Type中没有定义“选择”方法或作为扩展方法 - 基本上Type不是LINQ查询的有效数据源。你可以发布完整的例子(理想情况下它来自哪本书)?它可能只是一个错字 - 无论是你复制的还是书本身。

编辑:现在你已经发布了代码(这应该是一个问题编辑,而不是答案顺便说一句)我可以看到它只是一个错字。而不是:

from t in Assembly.GetExecutingAssembly().GetType()
你应该

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

注意最后的“s”:)

GetType()返回对象的类型(即typeof(Assembly)或某个子类),而GetTypes()返回类似的集合。后者绝对是你想要的。

答案 1 :(得分:1)

在行中:

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

你在GetTypes()结束时错过了's'。这应该可以解决问题,因为GetType()返回单个Type实例,而GetTypes()返回Type个对象数组。