Попробуйте использовать именованные экземпляры:
IUnityContainer container = new UnityContainer();
container.RegisterType<Type1>();
container.RegisterType<Type2>("Instance 1", new ContainerControlledLifetimeManager());
container.RegisterType<Type2>("Instance 2", new ContainerControlledLifetimeManager());
container.RegisterType<Type3>();
Type1 type1 = container.Resolve<Type1>();
if (type1 == ...)
{
Type2 instance1 = container.Resolve<Type2>("Instance 1");
}
else
{
Type2 instance2 = ontainer.Resolve<Type2>("Instance 2");
}
Вы можете выполнить некоторые проверки типа 1 и решить, какой экземпляр типа 2 вам понадобится. Обратите внимание, что параметр «новый ContainerControlledLifetimeManager ()» будет инициализировать одиночный экземпляр типа с сопротивлением, поэтому вы всегда получите один и тот же экземпляр типа 2.
Обновление: То же самое с интерфейсами. Надеюсь, это поможет.
IUnityContainer container = new UnityContainer();
container.RegisterType<TextDocument>();
container.RegisterType<ImageDocument>();
container.RegisterType(typeof (IView), typeof (TextView), "Text", new ContainerControlledLifetimeManager());
container.RegisterType(typeof (IView), typeof (ImageView), "Image", new ContainerControlledLifetimeManager());
IDocument document = container.Resolve<TextDocument>();
IView view = null;
if (document is TextDocument)
{
view = container.Resolve<IView>("Text");
}
else
{
view = container.Resolve<IView>("Image");
}
view.Show();