İki arabirim ile çalışırken, her ikisi de aynı dekoratöre kayıt olan Unity kapsayıcısında tuhaf bir davranış görüyorum. Bir kod örneği daha açık olacaktır. Unity: Aynı tür iki arabirim için kaydediliyor
Ben aşağıdaki sınıf hiyerarşisi vardır:public interface IBaseInterface
{
}
public interface IInterface1: IBaseInterface
{
}
public interface IInterface2: IBaseInterface
{
}
public class Interface1Impl : IInterface1
{
}
public class Interface2Impl : IInterface2
{
}
public class BaseInterfaceDecorator: IInterface1,IInterface2
{
private readonly IBaseInterface baseInterface;
public BaseInterfaceDecorator(IBaseInterface baseInterface)
{
this.baseInterface = baseInterface;
}
}
public class MyClass
{
private readonly IInterface1 interface1;
public MyClass(IInterface1 interface1)
{
this.interface1 = interface1;
}
}
Ve bu kayıt kodu:
var container = new UnityContainer();
container.RegisterType<IInterface1, BaseInterfaceDecorator>(
new InjectionConstructor(
new ResolvedParameter<Interface1Impl>()));
container.RegisterType<IInterface2, BaseInterfaceDecorator>(
new InjectionConstructor(
new ResolvedParameter<Interface2Impl>()));
var dependency = container.Resolve<MyClass>();
Ben Interface2Impl yerine Interface1Impl ile BaseInterfaceDecorator alıyorum Sınıfım çözme. Bana garip görünüyor. Açıklayabilir misin?
; Dahili Birlik, 'to' yazısının Oluşturma Anahtarını önbelleğe alır (örn. Genel imzalarda 'TTo'). Bir sonraki 'TFrom' türünü çözdüğünüzde, 'TTo için Oluşturma Anahtarı', oluşturma işlemini gerçekleştirmek için kullanılır. Bu yapı anahtarı ayrıca bir ömür boyu yönetici ile ilişkilendirilir ve bu nedenle Unity, TTo için tüm alt düzey çözümlemeler için (Build Up'da) ilk defa kullanılan (TFrom'un kimliğine bakılmaksızın) yöneticiyi kullanır. Bu, Unity'nin bir hatasıdır. Anahtarlar oluşturun. Bu geçici çözüm, kovaryant tipi kimlikleri estabilishing noktayı yenen adlandırılmış kayıtları kullanmaktır. –