Genel bir depo kullanıyorum. Hizmet katmanım depolamamla ve harita varlıklarıyla otomatik makamlı alan modellerini konuşuyor. Denetleyicilerim hizmet katmanımla konuşuyor ve varlıklardan veya depodan hiçbir şey bilmiyorlar.Tür, başvurulan bir derlemede tanımlanmıştır. C#, Genel Havuz Kalıbı, URF
Tüm temel CRUD'lar için genel bir hizmet sınıfı oluşturmaya çalışıyorum.
Benim jenerik servisi (kesmek) şöyle görünür:
public interface IService<TModel, TEntity>
{
void Add(TModel model)
}
public abstract class Service<TModel, TEntity> : IService<TModel, TEntity>
{
private readonly IGenericRepository<TEntity> _repository;
protected Service(IGenericRepository<TEntity> repository) { _repository = repository; }
public virtual void Add(TModel model) { _repository.Add(AutoMapper.Mapper.Map<TEntity>(model)); }
}
My Öğrenci Servisi: eklemek çağrılırken
public class StudentController
{
private readonly IStudentService _studentService;
public StudentController(IStudentService studentService)
{
_studentService = studentService;
}
public ActionResult AddStudent(Student model)
{
_studentService.Add(model); //ERROR
}
}
aşağıdaki olsun
public interface IStudentService : IService<Model.Student, Entity.Student>
{ }
public class StudentService : Service<Model.Student, Entity.Student>, IStudentService
{
private readonly IGenericRepository<Entity.Student> _repository;
public StudentService (IGenericRepository<Entity.Student> repository) : base(repository)
{
_repository = repository;
}
}
Ve denetleyicisi kontrol cihazımdan (yukarıdaki ERROR ile işaretlenmiş satır).
The type is defined in an assembly that is not referenced. You must add a reference to MyProject.Entities
ben hata nedenini anlıyorum ama benim hizmet kabul eder ve sadece modeller döner ve kuruluşlara hakkında bilmek gerekmez gibi bir sorun olacağını düşünmüyordu?
Denetleyicim sınıfımdaki varlıklara başvuruda bulunabilmem için istediğimi gerçekleştirmenin başka bir yolu var mı?
Hizmet Arabirimi gerçekten varlık türü parametresine mi ihtiyaç duyuyor? Soyut sınıf olacak ve bu tamam, ancak Arayüz için örneğinizde hiç kullanılmıyor. Ayrıca, hizmetinizin müşterilerinin varlıkları bilmediğini söylüyorsunuz, bu yüzden kullandıkları sözleşmede (yani, arabirimde) gerçekten bir anlam ifade etmiyor. – moreON
Bir proje referansı eklemeniz gerekecek, ancak kontrol cihazınızda ekstra kullanımlar eklemeniz gerekmeyecek. – Thomas
@moreON Siz haklısınız. Çok basit, bunu nasıl özledim bilmiyorum! – garethb