2014-01-08 3 views
1

Очень простой вопрос здесь, но я изо всех сил пытаюсь найти информацию об этом. У меня есть очень простой иерархии родитель/ребенок ...Пользовательские объекты с Unity

public class Parent : IParent 
{ 
    [Dependency] 
    public IChild Child { get; set; } 
} 

public class Child : IChild 
{ 
    [Dependency] 
    public IParent Parent { get; set; } 
} 

... и мои регистрации контейнерные именно то, что можно было ожидать:

this.Container.RegisterType<IParent, Parent>(); 
this.Container.RegisterType<IChild, Child>(); 

Когда контейнер создает родительский экземпляр он автоматически создает и вводит новый экземпляр дочернего элемента, но как я могу добавить родительскую ссылку в этот дочерний элемент?

В основном я пытаюсь найти эквивалент Unity метода Ninject InScope.

ответ

1

Будет ли конструкция для решения этой проблемы решить эту проблему?

public class Parent : IParent 
{ 
    public IChild Child { get; set; } 

    public Parent(IChild child) 
    { 
     child.Parent = this; 
     this.Child = child; 
    } 
} 

public class Child : IChild 
{ 
    public IParent Parent { get; set; } 
} 

IChild в конструкторе решается Unity без [Dependency] украшения.

+0

В этом случае, но все, что я использую в пользовательской области, так это то, что мне не нужно передавать интерфейсы по моей иерархии объектов. Разумеется, это не очень важно в простом случае, который я вам предоставил, но я мог видеть, как он выдувается в более крупном приложении. Другие рамки DI поддерживают его, я был бы удивлен, если Unity не имеет никакого механизма. –

+0

@MarkFeldman Вы ищете что-то вроде Unity PerResolveLifetimeManager? Он повторно использует экземпляры для каждого разрешения, как описано в msdn по адресу http://msdn.microsoft.com/en-us/library/ff660872(v=pandp.20).aspx. Я думаю, что это будет выглядеть как 'this.Container.RegisterType (новый PerResolveLifetimeManager());' – erli

+0

Закрыть достаточно erli, спасибо! –

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