2013-05-30 3 views
0

Я пытаюсь зарегистрировать общий класс следующим образом:В Autofac можно зарегистрировать общий тип для не-общего интерфейса?

builder.RegisterGeneric(typeof(WindowContext<>)) 
    .AsSelf() 
    .As<IWindowContext>() 
    .InstancePerLifetimeScope(); 

(WindowContext<T> : IWindowContext)

выше регистрация вызывает ArgumentException по сборке: службы «Inforbase.Presentation.IWindowContext» не является определение открытого типа.

Ожидаемое поведение заключается в том, что зависимость от WindowContext<T>, ближайшая к корню композиции, определит экземпляр, разрешенный для любого IWindowContext в пределах этой продолжительности жизни.

Я понимаю, что концепция немного странная, и имеет любопытный краевой случай, когда два класса в одном и том же пространстве времени запрашивают разные типы WindowContext<T>. Как ошибка, так и перезапись допустимы в моем сценарии.

Возможно ли это с помощью Autofac?

+0

Я все еще хотел бы знать, почему это невозможно, open-generic может использоваться как не-общая зависимость в другом экземпляре класса, а не только в корне композиции. – nietras

ответ

0

Я просто понял, что то, что я прошу, на самом деле не имеет смысла. Объекты, наиболее удаленные от корня композиции на графике зависимостей, это те, которые нужно создать сначала, и они не смогут разрешить IWindowContext, потому что в момент их разрешения конкретный тип IWindowContext не будет иметь значения, t были определены еще.

Лучший выход - это, вероятно, реорганизация структуры класса, делая WindowContext неэквивалентным. К счастью, это всего лишь эксперимент, а не то, что я действительно требую в своей архитектуре.

Смежные вопросы