2

我正在使用 Autofac(我已经在控制台应用程序中注册了基本 nuget 包)并想查看注册列表。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autofac;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            // First, create your application-level defaults using a standard
            // ContainerBuilder, just as you are used to.
            var builder = new ContainerBuilder();
            var appContainer = builder.Build();


            appContainer.ComponentRegistry.Registrations.Where(x => true);
        }
    }
}

问题是线路

appContainer.ComponentRegistry.Registrations.Where(x => true);

这里的智能感知没有给我 Where linq 方法,但是它确实编译了,据我所知,没有任何警告,消息中的错误。

我进一步尝试了这个

   IEnumerable<string> list = new List<string>();

    list.Where(x => true);

智能感知工作正常,并为我提供了所有标准列表方法。

我从头开始在几个不同的应用程序中尝试过这个,我得到了相同的行为。

关于发生了什么的任何想法?

编辑:

以下工作并在智能感知中正确显示

IEnumerable<IComponentRegistration> test = new List<IComponentRegistration>();
            test.Where(x => true);

我在用着

<package id="Autofac" version="3.0.1" targetFramework="net45" />从nuget。

并将鼠标悬停在 ComponentRegistrations 上给出 在此处输入图像描述

在这种情况下,范围定义为

  ILifetimeScope _scope;

但是,如果我直接尝试,我会得到同样的结果

 var builder = new ContainerBuilder();
 var appContainer = builder.Build();
 appContainer.ComponentRegistry.Registrations.Where(x => true);

IComponentRegistry 也被定义为(在 Autofac 中)

public interface IComponentRegistry : IDisposable
{
    ...
    IEnumerable<IComponentRegistration> Registrations { get; }
    ...
}
4

2 回答 2

0
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autofac;

namespace ConsoleApplication2
{
  class Program
   {
    static void Main(string[] args)
    {
        // First, create your application-level defaults using a standard
        // ContainerBuilder, just as you are used to.
        var builder = new ContainerBuilder();
        var appContainer = builder.Build();


        var registrations = appContainer.ComponentRegistry.Registrations.Where(x => x.Target.Equals("test"));
    }
 }
}

尝试将 linq 表达式分配给一个变量,看看它是否有效

于 2013-02-21T07:06:02.043 回答
0

评论复制到答案。

如果我对您的理解正确并且您的问题是智能感知无法正常工作

appContainer.ComponentRegistry.Registrations.Where(x => true); 

您可能应该尝试禁用您的插件,看看是否可以解决它,因为它对我来说工作正常。既然你说你有其他人确认,也许从你的安装有共同的任何插件开始。

于 2013-02-21T14:21:29.160 回答