можно зарегистрировать контейнер сам по себе и вводить его как любое свойство зависимости, как так:
IUnityContainer container = new UnityContainer();
container.RegisterInstance<IUnityContainer>(container);
классы, которые должны получить доступ к нему, будут иметь следующее свойство:
private IUnityContainer unityContainer;
[Dependency]
public IUnityContainer UnityContainer
{
get { return unityContainer; }
set { unityContainer = value; }
}
таким образом, контейнер введен каждый раз, когда экземпляр такого класса решен/создан.
Это более гибко, поскольку это работает на несколько контейнеров в рамках того же приложения, которое не было бы возможно с шаблоном "одиночка".
Я подозреваю, что вам будет лучше с общими отношениями для ссылок, чем пытаться связать все с базовым классом. Общие отношения позволяют связать такую модель, как EmailAddress, с любым другим классом, который, казалось бы, хорошо подходит для вашего варианта использования.