Почему Unity возвращает один и тот же экземпляр, если тип зарегистрирован для двух разных интерфейсов, но только с одним, как ContainerControlledLifeTimeManager - PullRequest
5 голосов
/ 02 апреля 2011

У меня есть два интерфейса, оба реализованных классом Apple

interface a { }

interface b { }

class Apple: a,b
{
}

Теперь, если я регистрирую Apple на обоих интерфейсах, но только один - с ContainerControlledLifeTimeManager, то при разрешении другого интерфейса также возвращается тот же экземпляр.Почему это так, и все равно обойти это?

IUnityContainer container = new UnityContainer();
container.RegisterType<a, Apple>(new ContainerControlledLifetimeManager());
container.RegisterType<b, Apple>();
var a = container.Resolve<a>();
Console.WriteLine(container.Resolve<b>().Equals(a).ToString());

1 Ответ

8 голосов
/ 04 апреля 2011

Настройка внедрения выполняется для класса реализации, а не для интерфейса. Это включает в себя всю жизнь. Поэтому, когда вы устанавливаете контролируемое время жизни контейнера для Apple, это всегда будет один и тот же экземпляр независимо от того, какой интерфейс вы использовали для его получения.

Если вам действительно нужны разные интерфейсы для одного и того же типа с разными временами жизни, на данный момент единственным вариантом будет называться регистрация.

...