Obecnie pracuję nad projektem MVC 3, używając Ninject jako mojego DI, obiekty biznesowe są przechowywane w oddzielnym zestawie. Występuje problem z parametrami kontrolera, podczas wysyłania z powrotem do operacji CRUD pojawia się błąd "Nie mogę utworzyć instancji interfejsu". Jestem świadomy, że nie można utworzyć instancji interfejsu, ale wydaje się, że jedynym sposobem, w jaki można to obejść, jest użycie niestandardowego modułu wiążącego model i przejście przez FormCollection. Wydaje się to bardzo nieporządne i chcę zachować tak dużo kodu specyficznego dla danego typu, jak to tylko możliwe - stąd interfejsy wszędzie i Ninject do DI konkrety. Nie tylko nietypowe powiązanie modelu wydaje się kłopotliwe - czy nie stracę również swoich DataAnnotations?Przejmująca jednostka MVC 3 jako interfejs
Niektóre kodu do opisania tego, co mam:
public ActionResult Create()
{
// I'm thinking of using a factory pattern for this part
var objectToCreate = new ConcereteType();
return (objectToEdit);
}
[HttpPost]
public ActionResult Create(IRecord record)
{
// check model and pass to repository
if (ModelState.IsValue)
{
_repository.Create(record);
return View();
}
return View(record);
}
ktoś napotkasz tego wcześniej? Jak sobie z tym poradziłeś?
Dzięki!
Czy nie złamałbym zasady luźnego sprzężenia? Co, jeśli chcę/muszę zmienić nazwę mojej konkretnej metody z jakiegoś powodu, np. Record staje się RecordDifferent. Mogę mieć RecordDifferent implementujący IRecord i zmienić mój DI, aby teraz wstrzykiwał RecordDifferent we wszystkich przypadkach IRecord. –
Preferuję używać klas dla kontenerów modelu i dziedziczenia zamiast interfejsów. Domyślnie DI nie jest używany do tworzenia obiektów przekazywanych do akcji. Używam DI tylko dla prawdziwej logiki, a nie dla kontenerów danych. – Novakov
Nie do końca rozumiem, co miałeś na myśli, ale postępując nieco z tym projektem, zdałem sobie teraz sprawę, że próbuję "odłączyć" proste kontenery danych, jak powiedziałeś. Nie ma żadnych zachowań (jeszcze) w żadnym z obiektów POCO, które mapują tabelę bazy danych, więc nie ma powodu, aby się z nimi łączyć - ani używać fabryki do ich tworzenia. Domyślam się, że miałem problem ze zrozumieniem, że odsprzęganie powinno być rzeczywiście stosowane do obiektów z zachowaniem, a nie tylko właściwości danych. –