Я хочу использовать IoC с Entity Framework и Ninject.Я полагаю, что мне нужны классы Generated Entity для реализации интерфейса, ICRUD.Существует пошаговое руководство , которое показывает, как заставить Entity Framework реализовать интерфейс.Я следовал указаниям, и мой файл EntityObjectCodeGenerator.cs действительно показывает «ICrud», но не реализует интерфейс.Я не вижу подклассов в EntityObjectCodeGenerator.tt, как говорится в статье.Я получаю сообщение об ошибке
«BugnetMvc.Models.BugNetEntities» не реализует элемент интерфейса «BugnetMvc.Services.ICrud.Update ()»
ОБНОВЛЕНИЕ Цель состоит в том, чтобы создать тестируемую расширяемую интрасеть MVC-3, использующую структуру сущностей, которая также поддерживает строго типизированные представления и частичные представления.Исходя из своего небольшого опыта работы с Ninject, я считаю, что мне нужно перегрузить конструктор моего контроллера службой для самого представления (допустим, методы CRUD доступны для каждого интерфейса) и по одному для каждого частичного представления:
EG
public HomeController(HomeService homeCrudService, PartialViewService1 partialviewService)
Обновление2 Чтобы быть понятным и, надеюсь, помочь другим, код может быть реализован следующим образом:
Вот как можно расширить Entity
namespace BugnetMvc.Models//ensure namespace matches entity
{
public partial class Milestone : ICrud<Milestone>//Entity, note the CRUD generic. This gives us a lot of flexibility working with Ninject
{
public bool Create()
{
throw new System.NotImplementedException();
}
public List<Milestone> Read()
{
var milestones = new List<Milestone>();
var result = from a in new BugNetEntities1().Milestones
where a.MilestoneID >= 0
select new { a.Milestone1 };
milestones = result.AsEnumerable()
.Select(o => new Models.Milestone
{
Milestone1 = o.Milestone1
}).ToList();
return milestones;
}
public bool Update()
{
throw new System.NotImplementedException();
}
public bool Delete()
{
throw new System.NotImplementedException();
}
}
Пример Mock-сущности:
namespace BugnetMvc.Services
{
public class MilestoneServiceMock : ICrud<MilestoneMock>
{
public MilestoneServiceMock()
{
}
public bool Create()
{
throw new System.NotImplementedException();
}
public bool Update()
{
throw new System.NotImplementedException();
}
public bool Delete()
{
throw new System.NotImplementedException();
}
List<MilestoneMock> ICrud<MilestoneMock>.Read()
{
//string[] mileStones = new string[14];
List<MilestoneMock> milestoneMocks = new List<MilestoneMock>();
milestoneMocks.Add(new MilestoneMock("New"));
milestoneMocks.Add(new MilestoneMock("Assessment"));
milestoneMocks.Add(new MilestoneMock("Pending Approval"));
milestoneMocks.Add(new MilestoneMock("Pending Start"));
milestoneMocks.Add(new MilestoneMock("Planning"));
milestoneMocks.Add(new MilestoneMock("Dev-In Process"));
milestoneMocks.Add(new MilestoneMock("Dev-Pending Approval to QA"));
milestoneMocks.Add(new MilestoneMock("Dev-Pending Move to QA"));
milestoneMocks.Add(new MilestoneMock("QA-In Process"));
milestoneMocks.Add(new MilestoneMock("QA-UAT"));
milestoneMocks.Add(new MilestoneMock("QA-Pending Approval to Prod"));
milestoneMocks.Add(new MilestoneMock("QA-Pending Move to Prod"));
milestoneMocks.Add(new MilestoneMock("On-Going"));
return milestoneMocks;
}
}
}
//Global.asax
internal class SiteModule : NinjectModule
{
public override void Load()
{
bool MOCKDB = true;
MOCKDB = false;
if (MOCKDB)
{
//Set up ninject bindings here.
Bind<ICrud<MilestoneMock>>().To<MilestoneServiceMock>();
Bind<ICrud<Application>>().To<ApplicationService>();
}
else
{
//Set up ninject bindings here.
Bind<ICrud<Milestone>>().To<Milestone>();
Bind<ICrud<Application>>().To<ApplicationService>();
}
}
}
Может возникнуть необходимость в Read (int Id), и в этом случае новый интерфейс, использующий те же основные идеи, что и выше, должен сработать.Можно даже обновить ICrud для передачи типа модели в методы.Там много вариантов.Это сработало для меня, спасибо Джону Скиту за его профессиональное руководство.