Autofac. Именованные сервисы



Контейнер Autofac предоставляет возможность внедрять конкретные зависимости, явно указывая некоторый ключ, который соотносится с желаемой зависимостью.



Например, у нас есть сервис IDisplay, отображающий какие-то произведения искусства IArtwork.

Чтобы указать, что мы хотим внедрить конкретную реализацию MyPainting, можно использовать атрибут KeyFilterAttribute.

По указанному ключу, он проведёт фильтрацию и выберет нужную зависимость.



Пример:





public class ArtDisplay : IDisplay

{

public ArtDisplay([KeyFilter("MyPainting")] IArtwork art) { ... }

}



// ...



var builder = new ContainerBuilder();



builder.RegisterType<MyPainting>().Keyed<IArtwork>("MyPainting");

builder.RegisterType<ArtDisplay>().As<IDisplay>().WithAttributeFiltering();



// ...

var container = builder.Build();