我正在使用 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; }
...
}