Genel ve başka bir amaç için bir örnek almaya çalışırken aşağıdaki kodları takip ediyorum.Castle Windsor, adlandırılmış örneği ve adlandırılmamış örneği hatalı
[TestMethod]
public void Test_Name_And_Named_Instances()
{
//MyClass implemented IMyClass
MyClass genericInstance = new MyClass("generic");
MyClass specialInstance = new MyClass("special");
IWindsorContainer container = new WindsorContainer();
container.Register(Component.For(IMyClass).Instance(genericInstance));
container.Register(Component.For(IMyClass).Instance(specialInstance).Named("special"));
IMyClass genericOne = container.Resolve<IMyClass>();
IMyClass specialOne = container.Resolve<IMyClass>("special");
Assert.AreSame(genericOne, genericInstance); //true
Assert.AreNotSame(genericOne, specialOne); //false
}
İki farklı örneklerini almak için bekliyoruz, ancak sonuç aynı hedeflere genericInstance hem genericOne ve specialOne puandır.
Herhangi bir fikrin var mı?
Benim hatam. Gönderilen kod, gerçek test kodundan biraz değişmişti. container.Register (Component.For (IMyClass) .Instance (genericInstance)); , container olmalıdır. (Bileşen (Form) (type (IMyClass)). Örnek (genericInstance)); IMyClass specialOne = container.Resolve ("özel"); , IMyClass specialOne = container.Resolve (typeof (IMyClass), "special"); Son Resolve'un bana sorun yarattığını buldum. IMyClass specialOne = container olmalıdır. Çözünür ("özel", typeof (IMyClass)); Derleyici bana hata vermiyor. Hepinizi rahatsız ettiğim için özür dilerim. –
Tao
Kendime ateş etmem gerekiyor. Orijinal test çalışması. Şimdi kayıt sırasını değiştirdikten sonra. Önce adlandırılmış türü kaydedin ve adsız olarak yazın. Bana yine aynı örneği veriyor. Ama eğer siparişi değiştirirsem, o zaman çalışır. Yeni değişiklik: container.Register (Component.For (typeof (IMyClass)) Örnek (özel Örnek). Ad ("özel")); container.Register (Component.For (typeof (IMyClass)). Örnek (genericInstance)); – Tao
@Tao: Bu davranış tasarım gereğidir, güncellenmiş yanıtıma bakın. –