7

から、特定のインターフェイスを実装するIComponentContext登録済みのリストを取得する必要があります。Type

タイプの実際のインスタンスは必要ありませんが、インスタンスを取得できるリストがType必要です

このリストを使用して、メッセージ バスでサブスクリプションを生成したいと考えています。

Autofac で登録されているインターフェイスのすべての実装を取得するにはどうすればよいですか?

4

2 に答える 2

14

私はこれを理解しました -

var types = scope.ComponentRegistry.Registrations
    .SelectMany(r => r.Services.OfType<IServiceWithType>(), (r, s) => new { r, s })
    .Where(rs => rs.s.ServiceType.Implements<T>())
    .Select(rs => rs.r.Activator.LimitType);
于 2012-12-27T22:11:55.647 に答える
2

AutoFac 3.5.2 (この記事に基づく: http://bendetat.com/autofac-get-registration-types.html )

最初にこの関数を実装します:

    using Autofac;
    using Autofac.Core;
    using Autofac.Core.Activators.Reflection;
    ...

        private static IEnumerable<Type> GetImplementingTypes<T>(ILifetimeScope scope)
        {
            //base on http://bendetat.com/autofac-get-registration-types.html article

            return scope.ComponentRegistry
                .RegistrationsFor(new TypedService(typeof(T)))
                .Select(x => x.Activator)
                .OfType<ReflectionActivator>()
                .Select(x => x.LimitType);
        }

次に、あなたが持っていると仮定しますbuilder

var container = builder.Build();
using (var scope = container.BeginLifetimeScope())
{
   var types = GetImplementingTypes<T>(scope);
}
于 2015-04-14T04:22:10.293 に答える