Tengo una clase base de "Producto", algunas otras clases "ProductBookDetail", "ProductDVDDetail" heredan de esta clase. Utilizo una clase ProductService para hacer operación en estas clases. Pero, tengo que hacer un control dependiendo del tipo (ISBN para Libro, idiomas para DVD). Me gustaría saber la mejor manera de emitir el valor "productDetail", que recibo en SaveOrupdate. Probé GetType() y fundido con (ProductBookDetail)productDetail
pero eso no es trabajo<T> genérico ¿cómo emitir?
Gracias,
var productDetail = new ProductDetailBook() { .... };
var service = IoC.Resolve<IProductServiceGeneric<ProductDetailBook>>();
service.SaveOrUpdate(productDetail);
var productDetail = new ProductDetailDVD() { .... };
var service = IoC.Resolve<IProductServiceGeneric<ProductDetailDVD>>();
service.SaveOrUpdate(productDetail);
public class ProductServiceGeneric<T> : IProductServiceGeneric<T>
{
private readonly ISession _session;
private readonly IProductRepoGeneric<T> _repo;
public ProductServiceGeneric()
{
_session = UnitOfWork.CurrentSession;
_repo = IoC.Resolve<IProductRepoGeneric<T>>();
}
public void SaveOrUpdate(T productDetail)
{
using (ITransaction tx = _session.BeginTransaction())
{
//here i'd like ot know the type and access properties depending of the class
_repo.SaveOrUpdate(productDetail);
tx.Commit();
}
}
}
tal vez deba hacer un servicio concreto y dejar guardado o actualizar genérico si no necesita guardar datos diferentes, o puede usar la herencia en su orm. La necesidad de que la entidad concreta suene extraña: normalmente haces algo como: new ProductServiceGeneric(). Y todo en tu código será libros, por lo que no tienes que saberlo. –