Me gustaría saber si (y si es así cómo) es posible definir un espacio de nombres como un parámetro de restricción en una declaración de clase genérica.Restricción de espacio de nombres con declaración de clase genérica
Lo que tengo es la siguiente:
namespace
MyProject.Models.Entities < - Contiene mis clases para ser persistido en db
namespace
MyProject.Tests.BaseTest < - Obvio Creo
Ahora la declinación de mi clase 'BaseTest' se ve así;
public class BaseTest<T>
Este BaseTest
hace poco más (en el momento de la escritura) que retire todas las entidades que se han añadido a la base de datos durante la prueba. Así que por lo general voy a tener una clase de prueba declarada como:
public class MyEntityRepositoryTest : BaseTest<MyEntity>
lo que me gustaría hacer es algo similar a lo siguiente:
public class BaseTest<T> where T : <is of the MyProject.Models.Entities namespace>
Ahora soy consciente de que sería totalmente posible simplemente declarar una clase 'BaseEntity' desde la cual heredarán todas las entidades creadas dentro del espacio de nombres MyProject.Models.Entities
;
public class BaseTest<T> where T : MyBaseEntity
pero ... En realidad no necesito, o quiero. Además, estoy usando un ORM y entidades de mapeo con herencia, aunque es posible, agrega una capa de complejidad que no es necesaria.
Entonces, ¿es posible restringir un parámetro genérico de clase a un espacio de nombres y no a un tipo específico?
De acuerdo. Y, si el tipo que desea permitir está en un ensamblaje diferente, busque 'InternalsVisibleToAttribute'. Lo uso con pruebas unitarias en diferentes conjuntos regularmente. –
Es una lástima, estoy sorprendido de que no puedas hacer algo con expresiones lambda o algo así. No se preocupe, esa solución 'interna' satisface mis necesidades a mitad de camino. Gracias por tu guía. – SomeGuy
@SomeGuy, hasta donde yo sé, las lambdas siguen siendo solo una cosa de tiempo de ejecución (excepto cuando se usan con Expressions, pero incluso así no son ejecutables en tiempo de compilación). Se ha debatido sobre si la característica prospectiva del compilador como servicio de C# 5.0 podría permitir alguna personalización del compilador, aunque tengo mis dudas si alguna vez lo veremos. –