Dinamik olarak sahte nesneyi arayüzle oluşturmam gerekiyor. Bu sahte nesnenin her yöntemi ve özelliği yalnızca NotImplementedException öğesini atmalıdır. Sadece .NET yansıma API'sı ile nasıl yapılacağını basit bir yolu var mı?Arabirim ile sahte nesne oluşturma
cevap
Kale Proxies çalışma zamanında arayüzleri için vekil nesneleri üreten bir düzgün kütüphanesidir. Tüm büyük alay yapıları da Castle Proxy'leri kaputun altında kullanıyor.
Öğrenme eğrisi, Moq gibi bir şey kullanmaktan daha diktir, ancak Moq, birim sınama için özel olarak kullanılmak üzere tasarlandığından, gereksinimleriniz için daha uygun bir uyum olabilir, böylece API sizin için çok 'gürültülü' olabilir. sonra tekrar.
Castle Proxies güzel çalışıyor gibi görünüyor. Bunun için teşekkürler. –
Moq gibi alay eden bir API kullanabilirsiniz. Birim testlerinde alay etmek için tasarlandı, ama ihtiyacınız olanı yapmalı.
Tek çözümünüz Reflection.Emit'i kullanmaktan korkuyor ve bu çok basit değil :) Bazı daha fazla bilgi için C# Reflection: Emitting classes to existing assemblies veya Reflection Emit'a bakın. Belki,
Moq (başka bir yanıtta önerildiği gibi) Reflection.Emit kullanarak bir kütüphanedir, bu yüzden daha basit bir çözüm olabilir! – bang
Yardımcı olabilir. (Kendi ana kopyalanan)
bir örnek kod:
using ImpromptuInterface;
using ImpromptuInterface.Dynamic;
public interface IMyInterface{
string Prop1 { get; }
long Prop2 { get; }
Guid Prop3 { get; }
bool Meth1(int x);
}
//Anonymous Class
var anon = new {
Prop1 = "Test",
Prop2 = 42L,
Prop3 = Guid.NewGuid(),
Meth1 = Return<bool>.Arguments<int>(it => it > 5)
}
IMyInterface myInterface = anon.ActLike<IMyInterface>();
- 1. Web kamerasıyla arabirim oluşturma
- 2. Python'da sahte metin dosyası oluşturma
- 3. PHP biriminde sahte Nesneler oluşturma
- 4. Arabirim oluşturucudaki Nesne Kitaplığından Pencere nasıl kullanılabilir?
- 5. 3D openGL dünyasında 2B arabirim oluşturma ile ilgili sorun
- 6. Hız şablonunda nesne oluşturma
- 7. Arabirim Oluşturucu'ya nasıl özel bir nesne ekleyebilirim?
- 8. Metin dosyasından nesne oluşturma
- 9. JavaScript nesne oluşturma
- 10. IDisposable ile arabirim mirası?
- 11. Java'da nesne oluşturma nasıl engellenir?
- 12. sahte fasulyeleri
- 13. JS nesnesinde dinamik nesne oluşturma
- 14. Farklı kitaplıklar arasında nesne oluşturma
- 15. Jquery'de Rastgele Düşen Nesne Oluşturma
- 16. CRTP'yi bir arabirim ile kullanma
- 17. "Sahte sayfalar" kullanarak alt sayfaların alt sayfasını oluşturma
- 18. Xcode 5'te Arabirim Oluşturucu'dan nasıl nesne çıkarılır?
- 19. C# Nesne ile JSON oluşturma Aşağıdaki JSON veri oluşturmak çalışıyorum
- 20. Javascript ile sahte geri gönderme nasıl oluşturulur?
- 21. Fabrika kızından sahte nesneleri döndürme
- 22. svcutil, oluşturulmuş arabirim proxy'si
- 23. çizgi nesne oluşturma - vektör girişi vs Matrix
- 24. PostgreSQL ile Havuz Oluşturma JDBC
- 25. Arabirim olarak ember mixin
- 26. Arabirim Oluşturucu'da görüntülenmeyen yazı tipleri
- 27. PHPUnit sahte ebeveyn yöntemi
- 28. Silex'te (sahte kapaklar) PHPUnit
- 29. Otomatik Düzeltme + NSubstitute: Sahte donma?
- 30. Arabirim Kalıtımı
Sahte kitaplıkları kullanmanız gerektiği anlaşılıyor. NotImplementedException ile neden bir sınıfa sahip olmalısınız? Belki de alay kullanmaktan daha iyi bir çözüm var. – Archeg
Arabirimler ve bu arabirimleri uygulayan sınıfları içeren derlemeler ile dolu bir derlemem var. Yani uygulama başlangıcında bu klasörü tararım ve uygulamalarıyla tüm arayüzleri Castle IoC konteynerine kaydederim. Ama bazı eksik uygulama var, bu yüzden eksik bir şey olduğunu çalışma zamanında bilmeme izin vermek için sadece istisna atmak olacak sahte sınıf oluşturmak gerekir. Bu gerçekten büyük bir uygulamadır, bu yüzden bu sahte sınıfları manuel olarak oluşturmak istemiyorum. –