Tüm uygulama ömrü boyunca mevcut olan IWindsorContaner ürünüm var. Unittests için türlerine altında alay/saplama, vb. Kayıt yapmak mümkündür. Test bittiğinde ve fikstür yerleştirildiğinde, test için kayıtlı bileşenler “Unregister” adı verilen kendiliğinden oluşturulan bir yöntemle kaldırılır.Bileşenler Kale 3.0 ile nasıl kaldırılır?
Şimdi, en son 3.0 olan Castle sürümüne güncellemek istiyorum. 3,0 açıklamasına göre IKernel.RemoveComponent yöntemi kaldırıldığı için
public void Unregister(string contextName, string registrationName)
{
IWindsorContainer context = GetOrCreateContext(contextName);
context.Kernel.RemoveComponent(registrationName);
}
gibi bir şey, artık mümkün değildir belirtiyor. Bunu düzeltmek için yapılan açıklama gerçekten yeterli değil ("IHandlerSelectors'ı kullanmayı deneyin.").
Ben unittests için kullanmak fikstür basitleştirilmiş versiyonu:
public sealed class DependencyInjectionFixture : IDisposable
{
private Stack<Type> registeredTypes = new Stack<Type>();
// Registering of mocks/stubs, etc
public void RegisterSingleton<T>(T singleton, string objectName)
{
registeredTypes.Push(typeof(T));
IWindsorContainer context = GetOrCreateContext(contextName);
context.Register(Component.For(typeof(T))
.Named(objectName)
.Instance(singleton)
.LifeStyle.Singleton);
}
// Called when tests ends
public void Dispose()
{
IWindsorContainer context = GetOrCreateContext(contextName);
while (registeredTypes.Count > 0)
context.Kernel.RemoveComponent(CSApplicationContext.GetRegistrationNameFor(registeredTypes.Pop()));
}
} Castle 3.0 ile
nasıl kaldırabilirim bileşenleri?
Elbette bu işe yarar. Ancak bu, birçok bağımlı yazılım projesinde çok fazla kod değişikliği gerektirecektir. Gerçek yerine bir tutucu nesneyi kabın içine koyarak bir çözüm buldum. Ama daha fazla düşündüğüm şey Castle, gerçekte doğru olmayan IoC konteyneri gibi görünmüyor, değil mi? – Antineutrino
Bu noktaya yazmış olduğum tüm birim testleri için, Kale ünite testleri için tam olarak mükemmel IoC konteynır olmuştur. Niçin kayıtlı bütün varlıkları temizlemeniz gerekiyor? – eouw0o83hf
Çünkü her birim testi kendi alaylarını kaydeder. Eğer kaldırılmazlarsa bir sonraki ünite testi yanlış alayları kullanacaktır. Yani tüm bileşenleri kaldırır Ioc test fikstürü IDisposable.Dispose yönteminde kod var. – Antineutrino