Pytania otagowane jako dependency-injection

Wstrzykiwanie zależności, to wzorzec projektowy, w którym zależności (wystąpienia obiektów, właściwości) komponentu są ustawiane za pomocą konstruktora (ów), metod lub pól (właściwości). Jest to specjalna forma bardziej ogólnej inwersji zależności.

2
Wstrzykiwanie zależności a metody statyczne
Przeprowadziłem dzisiaj interesującą dyskusję z innym programistą na temat tego, jak podejść do klasy za pomocą metody, która akceptuje ciąg i ciąg wyjściowy. Wyobraź sobie coś takiego, co zostało w całości wykonane na potrzeby przykładu public string GetStringPart(string input) { //Some input validation which is removed for clarity if(input.Length > …

5
Jakie są zalety wstrzykiwania zależności w przypadkach, gdy prawie wszyscy potrzebują dostępu do wspólnej struktury danych?
Istnieje wiele powodów, dla których globale są złe w OOP. Jeśli liczba lub rozmiar obiektów wymagających współdzielenia jest zbyt duża, aby można je było efektywnie przekazać w parametrach funkcji, zwykle wszyscy zalecają Wstrzykiwanie zależności zamiast obiektu globalnego. Jednak w przypadku, gdy prawie wszyscy muszą wiedzieć o pewnej strukturze danych, dlaczego …

2
Problem ze zrozumieniem słowa „szew”
Czytam „Dependency Injection in .NET” Mark Seemann (jest fantastyczny i musi mieć), a autor często używa słowa „szew”. Ale nie rozumiem, co to znaczy. Oto przykład użycia tego słowa: Rozdział 7 wyjaśnia, jak komponować obiekty w różnych konkretnych ramach, takich jak ASP.NET MVC, WPF, WCF i tak dalej. Nie wszystkie …



2
Czy istnieją dowody na to, że zastosowanie wstrzykiwania zależności poprawia wyniki w inżynierii oprogramowania?
Niezależnie od popularności, czy istnieją jakieś dowody empiryczne, które pokazują, że wstrzykiwanie zależności (i / lub użycie kontenera DI) pomaga, powiedzmy, w zmniejszeniu liczby błędów, poprawie łatwości konserwacji lub zwiększeniu prędkości opracowywania rzeczywistych projektów oprogramowania?

1
Praktyki kontenerowe polegające na wstrzykiwaniu zależności / IoC podczas pisania frameworków
Użyłem różnych kontenerów IoC (Castle.Windsor, Autofac, MEF itp.) Dla .Net w wielu projektach. Zauważyłem, że są one często nadużywane i zachęcają do wielu złych praktyk. Czy istnieją jakieś ustalone praktyki dotyczące korzystania z kontenerów IoC, szczególnie w przypadku zapewniania platformy / platformy? Moim celem jako twórcy frameworku jest uczynienie kodu …

8
Czy warto stosować Dependency Injection poza UnitTesting
Biorąc pod uwagę konstruktor, który nigdy nie będzie musiał używać różnych implementacji kilku obiektów, które inicjuje, czy nadal jest praktyczne stosowanie DI? W końcu nadal możemy chcieć przeprowadzić test jednostkowy. Klasa, o której mowa, inicjuje kilka innych klas w swoim konstruktorze, a klasy, których używa, są dość specyficzne. Nigdy nie …

5
Kiedy używać interfejsów (testy jednostkowe, IoC?)
Podejrzewam, że popełniłem tutaj błąd ucznia i szukam wyjaśnienia. Wiele klas w moim rozwiązaniu (C #) - śmiem twierdzić, że większość - skończyłem pisać odpowiedni interfejs. Np. Interfejs „ICalculator” i klasa „Calculator”, która go implementuje, nawet jeśli nigdy nie zastąpię tego kalkulatora inną implementacją. Ponadto większość z tych klas znajduje …

2
Czy DDD-Lite jest językiem wzorcowym do wstrzykiwania zależności?
Natknąłem się na przemówienie Grega Younga 7 powodów, dla których projekty DDD zawiodły, kiedy wspomina coś, co nazywa DDD-Lite o 7:20. Podsumowując, w zasadzie mówi, że niektórzy używają DDD jako języków wzorcowych (bytów, repozytoriów, obiektów wartości, usług itp.) Bez robienia czegokolwiek innego związanego z DDD. Postuluje, że 60% lub więcej …

3
Proszę sprzedaj mnie na pojemnikach IoC
Widziałem kilka polecających użycie kontenerów IoC w kodzie. Motywacja jest prosta. Weź następujący wstrzyknięty kod zależności: class UnitUnderTest { std::auto_ptr<Dependency> d_; public: UnitUnderTest( std::auto_ptr<Dependency> d = std::auto_ptr<Dependency>(new ConcreteDependency) ) : d_(d) { } }; TEST(UnitUnderTest, Example) { std::auto_ptr<Dependency> dep(new MockDependency); UnitUnderTest uut(dep); //Test here } W: class UnitUnderTest { std::auto_ptr<Dependency> …

5
C ++: Czy klasa powinna posiadać lub obserwować swoje zależności?
Powiedzmy, że mam klasę, Foobarktóra używa (zależy od) klasy Widget. W Widgetdawnych czasach wolud może być zadeklarowany jako pole Foobar, a może jako inteligentny wskaźnik, jeśli zachodzi potrzeba zachowania polimorficznego, i zostanie zainicjowany w konstruktorze: class Foobar { Widget widget; public: Foobar() : widget(blah blah blah) {} // or std::unique_ptr<Widget> …

4
Czy wstrzykiwanie zależności powinno odbywać się w ctor czy według metody?
Rozważać: public class CtorInjectionExample { public CtorInjectionExample(ISomeRepository SomeRepositoryIn, IOtherRepository OtherRepositoryIn) { this._someRepository = SomeRepositoryIn; this._otherRepository = OtherRepositoryIn; } public void SomeMethod() { //use this._someRepository } public void OtherMethod() { //use this._otherRepository } } przeciwko: public class MethodInjectionExample { public MethodInjectionExample() { } public void SomeMethod(ISomeRepository SomeRepositoryIn) { //use SomeRepositoryIn } …

3
Dostaję zastrzyk zależności, ale czy ktoś może mi pomóc w zrozumieniu potrzeby posiadania kontenera IoC?
Przepraszam, jeśli wydaje się to kolejną powtórką pytania, ale za każdym razem, gdy znajduję artykuł na ten temat, głównie mówi on o tym, czym jest DI. Tak, dostaję DI, ale staram się zrozumieć potrzebę kontenera IoC, do którego wszyscy chyba się pakują. Czy celem kontenera IoC jest po prostu „automatyczne …

5
Czy mogę używać wstrzykiwania zależności bez przerywania enkapsulacji?
Oto moje rozwiązanie i projekty: BookStore (rozwiązanie) BookStore.Coupler (projekt) Bootstrapper.cs BookStore.Domain (projekt) CreateBookCommandValidator.cs CompositeValidator.cs IValidate.cs IValidator.cs ICommandHandler.cs BookStore.Infrastructure (projekt) CreateBookCommandHandler.cs ValidationCommandHandlerDecorator.cs BookStore.Web (projekt) Global.asax BookStore.BatchProcesses (projekt) Program.cs Bootstrapper.cs : public static class Bootstrapper.cs { // I'm using SimpleInjector as my DI Container public static void Initialize(Container container) { container.RegisterManyForOpenGeneric(typeof(ICommandHandler<>), typeof(CreateBookCommandHandler).Assembly); …

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.