2016-07-19 25 views
9

Próbuję przenieść aplikację asp.net do rdzenia asp.net. Mam wtrysk właściwości (używając ninject) w mojej implementacji UnitOfWork w ten sposób.Włamanie właściwości w rdzeniu Asp.Net

[Inject] 
public IOrderRepository OrderRepository { get; set; } 
[Inject] 
public ICustomerRepository CustomerRepository { get; set; } 

Czy istnieje sposób na osiągnięcie tej samej funkcjonalności za pomocą wbudowanego DI w rdzeniu .net? Czy możliwe jest również użycie wiązania konwencyjnego?

+0

Powiązane: https://stackoverflow.com/questions/39849142/when-to-use-property- injection – Steven

Odpowiedz

10

Nie, wbudowany pojemnik DI/IoC jest celowo przechowywany w prosty sposób zarówno pod względem użytkowania, jak i funkcji, aby zapewnić podstawę dla innych pojemników DI do podłączenia.

Nie ma więc wbudowanej obsługi: Auto-Discovery, Auto-rejestracje, Dekoratory lub wtryskiwacze lub rejestracje oparte na konwencjach. Nie ma też planów, aby dodać to do wbudowanego kontenera, ale z tego, co wiem.

Będziesz musiał użyć kontenera zewnętrznego z obsługą wtrysku nieruchomości.

Należy zauważyć, że wstrzyknięcie właściwości jest uważane za złe w 98% wszystkich scenariuszy, ponieważ ukrywa zależności i nie ma gwarancji, że obiekt zostanie wstrzyknięty podczas tworzenia klasy.

Za pomocą wstrzyknięcia konstruktora można wymusić to za pomocą konstruktora i sprawdzić wartość zerową, a nie tworzyć wystąpienie klasy. Przy wtrysku własności jest to niemożliwe, a podczas testów jednostkowych nie jest oczywiste, które usługi/zależności klasy wymaga, gdy nie są zdefiniowane w konstruktorze, tak łatwo można je przegapić i uzyskać NullReferenceExceptions.

Jedynym uzasadnionym powodem, dla którego wehikuł Property Injection kiedykolwiek znalazłem, było wstrzyknięcie usług do klas proxy wygenerowanych przez bibliotekę strony trzeciej, tj. Proxy WCF utworzone z interfejsu, w którym nie masz kontroli nad tworzeniem obiektu.

Unikaj tego wszędzie indziej niż.

Powiązane problemy