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 に答える