Структура карты: извлечение всех конкретных классов данного интерфейса по имени - PullRequest
0 голосов
/ 23 ноября 2011

Я хочу иметь возможность получать все экземпляры определенного интерфейса, которые были настроены в Structuremap под заданным именем.

Я уже использую Structuremap в проекте для внедрения в конструктор, и мне кажется, что мне нужно с этим справиться.

Например: у меня есть интерфейс IProcessor, который реализуют многие конкретные классы. Каждый конкретный класс имеет имя , причем некоторые классы имеют одно и то же имя. Для заданного имени я хочу иметь возможность вернуть все конкретные экземпляры IProcessor.

IEnumerable<IProcessor> processors = ProcessorsByName("foo");

ProcessorsByName(string name)
{
    // Some Structuremap magic here
    // Ideally something like (which I know doesn't exist)
    return ObjectFactory.GetAllNamedInstances<IProcessor>(name);
}

Я знаю, что мог бы позвонить ObjectFactory.GetAllInstances<IProcessor>(), а затем в ходе этого тестирования перечислить каждое из них, чтобы убедиться, что это правильное имя, но это звучит расточительно.

// Possible solution
interface IProcessor
{
    string Name { get; }
}

IEnumerable<IProcessor> processors = ProcessorsByName("foo");

ProcessorsByName(string name)
{
    // Having a dog and barking yourself
    return ObjectFactory.GetAllInstances<IProcessor>().Where(p => p.Name == name);
}

1 Ответ

0 голосов
/ 23 ноября 2011

В одну сторону:

public sealed class MyRegistry : Registry
{
    public MyRegistry()
        : base()
    {

        For<IProcessor>()
            .Use<FooProcessor>().Named("Foo");
...