2010-04-23 11 views
25

Kullanıcının çalışma zamanında farklı donanımlar arasında seçim yapabileceği bir senaryo var. Arka planda, tümü IHardware arabirimini uygulayan birkaç farklı donanım sınıfımız var. Bu arayüz için seçili donanım örneğini kaydetmek için Unity'yi kullanmak istiyoruz. Ancak, kullanıcı başka bir donanım seçtiğinde, bu kayıt işlemini çalışma zamanında değiştirmemizi gerektirecektir. Birlik: Kayıtlı türü çalışma zamanında başka bir türle değiştir

public interface IHardware 
{ 
    // some methods... 
} 

public class HardwareA : IHardware 
{ 
    // ... 
} 

public class HardwareB : IHardware 
{ 
    // ... 
} 


container.RegisterInstance<IHardware>(new HardwareA()); 

// user selects new hardware somewhere in the configuration... 

// the following is invalid code, but can it be achieved another way? 
container.ReplaceInstance<IHardware>(new HardwareB()); 

bu davranış bir şekilde elde edilebilir:

Aşağıdaki örnek

bu daha net hale getirebilir?

BTW: Kapsayıcıdan zaten çözümlenmiş olan durumların elbette yeni örneklerle değiştirilmeyeceğinin tamamen farkındayım. Kendimizi, örneği bir kez daha çözmeyi zorlayarak kendimize bakacağız.

cevap

37

UnityContainer'ın RegisterInstance yöntemi, onları adlarına göre ayırmazsanız, son kayıt girişini her zaman geçersiz kılar.

Yani

container.RegisterInstance<IHardware>(new HardwareB()); 

ararsanız sen bilmiyordun, arayüzde IHardware kaydını geçersiz kılar ve serin bir sonraki çözme girişimi

+0

tarihinde HardwareB retreive olacak/o deneyin. Çok teşekkürler! – gehho

İlgili konular