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; }
...
}