Necesito crear dinámicamente objeto falso por interfaz. Todos los métodos y propiedades de este objeto falso deberían simplemente lanzar NotImplementedException. ¿Hay alguna manera simple de hacerlo solo con .NET reflection API?Crear objeto falso por interfaz
Respuesta
Castillo La representación es una biblioteca ordenada que genera objetos proxy para las interfaces en tiempo de ejecución. Todos los principales marcos burlones usan Castle Proxies también.
La curva de aprendizaje es más pronunciada que usar algo como Moq, pero puede ser más apropiado para sus necesidades ya que Moq está diseñado específicamente para pruebas unitarias, por lo que la API puede ser demasiado ruidosa para lo que usted hace re después.
Castle Proxies parece estar funcionando bien. Gracias por esto. –
Puede utilizar una API de burla como Moq. Está diseñado para burlarse en pruebas unitarias, pero debe hacer lo que necesita.
Me temo que su única solución es usar Reflection.Emit, y eso no es muy simple :) Ver C# Reflection: Emitting classes to existing assemblies o Reflection Emit para obtener más información.
Moq (como se sugiere en otra respuesta) es una biblioteca que usa Reflection.Emit para que sea una solución más simple. – bang
Tal vez ImpromptuInterface puede ayudar.
Un código de ejemplo (copiado de su página de inicio) es:
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. ¿Podemos crear un objeto de una interfaz?
- 2. crear objeto de clase abstracta e interfaz
- 3. ModelState.IsValid == falso, ¿por qué?
- 4. Ejemplo de objeto falso RSpec
- 5. ¿Puede un objeto ser falso?
- 6. ¿Por qué is_array() devuelve falso?
- 7. Esto parece crear un objeto desde una interfaz; ¿como funciona?
- 8. ¿Por qué es falso ProgressEvent.lengthComputable?
- 9. Crear interfaz para ObjectContext
- 10. Objeto como interfaz
- 11. Crear objeto anónimo por reflexión en C#
- 12. ¿Por qué $ ("cuerpo") == $ ("cuerpo") devuelve falso?
- 13. Javascript: ¿Por qué si (falso)?
- 14. Cómo crear un archivo de texto falso en Python
- 15. falso/FALSO - ¿alguna diferencia?
- 16. NoMethodError: undefined método `[]' por falso: FalseClass
- 17. Crear objetos desde una interfaz en C#
- 18. ¿Por qué XMLHttpRequest ProgressEvent.lengthComputable podría ser falso?
- 19. ¿Por qué esta declaración IF devuelve falso?
- 20. ¿Por qué (0-6) es -6 = Falso?
- 21. ¿Por qué isNaN (123.) Devuelve falso?
- 22. En Oracle, ¿por qué es '' = '' falso?
- 23. Request.Browser.IsMobileDevice = falso para Android, ¿por qué?
- 24. Prueba si el objeto implementa la interfaz
- 25. casting un objeto a una interfaz genérica
- 26. Android - Forma adecuada para esperar objeto manejador por crear
- 27. por qué no podemos crear nuestro propio objeto ostream
- 28. ¿Por qué obtengo una AssociationTypeMismatch al crear mi objeto modelo?
- 29. ¿Cómo puedo crear una interfaz para matplotlib?
- 30. ¿Debo crear una interfaz para cada modelo?
Parece que necesita utilizar bibliotecas falsas. ¿Por qué necesita tener clase con NotImplementedException? Quizás haya una mejor solución que usar burlas. – Archeg
Tengo un ensamblaje con interfaces y una carpeta llena de ensamblajes que contiene clases que implementa esas interfaces. Por lo tanto, al iniciar la aplicación, estoy escaneando esta carpeta y registrando todas las interfaces con su implementación en el contenedor de Castle IoC. Pero faltan algunas implementaciones, por lo que necesito generar clases falsas que solo lanzarán excepciones para avisarme en tiempo de ejecución que falta algo. Es realmente una gran aplicación, así que no quiero crear estas clases falsas de forma manual. –