Как зарегистрировать универсальные интерфейсы в StructureMap - PullRequest
5 голосов
/ 17 июля 2009

Как мне зарегистрировать все экземпляры универсального интерфейса в Структурированной карте?

Я знаю, как это сделать для не универсального интерфейса:

internal class MVCDemoRegistry : Registry
    {
        public MVCDemoRegistry()
        {
            Scan(x =>
            {
                x.Assembly("MVCDemo");
                x.Assembly("MVCDemo.Infrastructure");
                x.Assembly("MVCDemo.Services");

                x.AddAllTypesOf<ISupplyView>();
            });
        }
    }

1 Ответ

10 голосов
/ 23 июля 2009

Я бы пошел с чем-то вроде

// in IToaster.cs
public interface IToaster<T> {}

// in your StructureMap registry
Scan(x =>
{
    x.Assembly("MVCDemo");
    x.Assembly("MVCDemo.Infrastructure");
    x.Assembly("MVCDemo.Services");

    x.AddAllTypesOf(typeof(IToaster<>))
});

Ключевым моментом здесь является то, что этот подход использует неуниверсальную перегрузку AddAllTypesOf (). Иначе это действительно становится липким виджетом.

См. Эту ветку SO для хорошего обсуждения этих проблем: StructureMap Автоматическая регистрация для универсальных типов с использованием Scan

Это должно сработать, если в вашем подходе что-то не хватает - не стесняйтесь обновлять, если так.

...