Структура карты и общие типы - PullRequest
4 голосов
/ 15 апреля 2010

У меня ситуация, которая, кажется, немного отличается от других, которые я видел. Для пояснения, это не обычный вопрос, например; что-то вроде IAClass отображается на AClass и т. д., что предполагает использование в основном одного конкретного класса для интерфейса.

Это подразумевает наличие одного общего класса, но я хочу иметь возможность загружать ВСЕ возможные варианты его использования.

Например, основной класс

public class MyClass<TDomainObject> : IMyClass<TDomainObject> 
     where TDomainObject : DomainObject

Таким образом, пример использования будет

IMyClass<Person> p = new MyClass<Person>;
IMyClass<Employer> p = new MyClass<Employer>;

т.е. для всех объектов DomainObject я хотел бы иметь возможность загрузить MyClass <> для. Итак, вы можете видеть, что я не использую определенный класс для каждого объявления, все они используют один и тот же.

Как мне загрузить это в StructureMap?

Ответы [ 2 ]

3 голосов
/ 15 апреля 2010

Это на самом деле более простое использование дженериков.

For(typeof(IMyClass<>)).Use(typeof(MyClass<>))

Если вы используете более старую версию Structuremap, замените более подробные ForRequestType и TheDefaultIsConcreteType.

0 голосов
/ 08 декабря 2011

После некоторых поисков я обнаружил, что вы можете использовать функцию автоматической регистрации в Structuremap 2.5+ с обобщениями над соглашениями, так же, как вы могли бы делать с не-обобщениями.

Просто создайте свой контейнер как:

return new Container(x =>
        {
            x.Scan(y =>
            {
                y.TheCallingAssembly();
                y.AddAllTypesOf(typeof(IMyClass<>));
                y.WithDefaultConventions();
            });
        });
...