В моем интерфейсе пакета у меня есть этот следующий кусок кода, который выполняется, когда пользователь хочет изменить некоторую информацию о художнике:IoC/MEF контейнер
IArtist artistToChange = ContainerHelper.Container.GetExportedValue<IArtist>();
artistToChange.Load(new Guid("provided guid"));
artistToChange.SomeProperty = newValue;
artistToChange.Update();
Being художнику объект в моей области состоит из другие вещи от IUser CreatedBy
& IUser LastAlteredBy
свойства, которые необходимо загрузить (подумайте о взаимоотношениях «много-к-одному»). У каждого объекта также есть собственный репозиторий. IArtist имеет IArtistRepository так же, как IUser имеет IUserRepository
.
Моя проблема заключается в следующем: Как я могу получить экземпляр конкретной реализации IUser
внутри IArtist.Load()
при сохранении IoC (без конкретной реализации IArtist
не зная о конкретной реализации IUser
)?
(Для того, чтобы сделать вызов вещи легко ДАВАЙТЕ из CArtist
конкретной реализации IArtist
и CUser
об осуществлении IUser
.)
Имея это в виду я, хотя о прохождении контейнера к лиц, чтобы они могли также запрашивать детали, но я не знаю, является ли это хорошей идеей или даже анти-шаблоном, главным образом потому, что им используется инсталляция конструктора, а мой конструктор для «CArtist» выглядит так:
[ImportingConstructor]
public CArtist(IArtistRepository repository)
{
this.repository = repository;
}
, но я не могу получить контейнер, чтобы придать себя с чем-то вроде
[ImportingConstructor]
public CArtist(IArtistRepository repository, CompositionContainer container)
{
this.container = container
this.repository = repository;
}
Так что это в основном это ... Я совершенно потерял здесь ... это оказался крик о помощи/руководство более чем вопрос о себе ...
PS: Если какая-либо другая информация необходима, попросите ее!
Как вы собираетесь использовать контейнер в классе CArtist? Будет ли контейнер более гибким, чем свойства, украшенные ImportAttribute? –