2016-01-21 13 views
11

znajdę się dodając Zależności wiele do konstruktorów tak:Konstruktor zależność fragment kodu w Visual Studio

public class SomeClass() { 
    private ISomeService _service; 
    private IAnotherService _anotherService; 
    public SomeClass(ISomeService service, IAnotherService anotherService) { 
     _service = service; 
     _anotherService = anotherService; 
    } 
} 

Są dość uciążliwe pisać, szukałem dla fragmentów kodu w visual studio, aby automatycznie dodaj jeden do konstruktora, ale go nie znalazłeś.

Co chcę jest:

  • Przy dodawaniu zależność do konstruktora jakiś fragment automatycznie tworzy zmienną lokalną i przypisuje do niego.

LUB

  • dodać zmienną prywatną, a następnie jakiś fragment automatycznie dodaje je do konstruktora i przypisuje go do zmiennej lokalnej.
+0

Określa wersję kierowania C# oraz wersję wizualną studia; które mogłyby dostarczyć różnych odpowiedzi. – OmegaMan

+0

@OmegaMan vs 2015, .net 4.5 –

+0

Nie mam pojęcia, o co pytasz. Chcesz wygenerować konstruktora, wybierając prywatne pola? – Jannik

Odpowiedz

12

Jeśli masz R#, możesz wpisać deklaracje pól, a następnie je podświetlić i nacisnąć Alt-Enter, co da ci możliwość wygenerowania przypisań konstruktora i pola.

enter image description here

+0

Używałem tego przez kilka dni i jest to naprawdę miłe. –

0

Możesz łatwo dodawać fragmenty kodu, jak chcesz, definiując je w XAML i dodając je jako edytor, możesz użyć znaczników miejsca takich jak "nazwa klasy", aby użyć go jako konstruktora na przykład, a następnie umieść zmienne w nim tekstu jako statycznego

nie chcę, aby napisać kod, ponieważ jest powielany można sprawdzić, jak to zrobić tutaj: https://msdn.microsoft.com/en-us/library/ms242312.aspx?f=255&MSPPError=-2147217396

można również zobaczyć to pytanie: How can I automatically generate a constructor that receives and stores services for free?

3

Jeśli nie masz Resharper, można dodać parametr w konstruktorze napisać assignament do własności nieistniejącego i uderzyć Ctrl +. . Spowoduje to wyświetlenie monitu o opcje automatycznego tworzenia właściwości lub pola.

Na przykład, masz tę klasę:

public class MyClass 
{ 
    public MyClass() 
    { 
    } 
} 

Następnie dodać parametr do konstruktora, a assignament:

public class MyClass 
{ 
    public MyClass(IDependency myDependency) 
    { 
     this.myDependency = myDependency; 
    } 
} 

i naciśnij ctrl +. podczas gdy na asignament linii i wybierz utworzyć pole, a dostaniesz to:

public class MyClass 
{   
    IDependency myDependency; 

    public MyClass(IDependency myDependency) 
    { 
     this.myDependency = myDependency; 
    } 
} 
0

co chce zrobić z ISomeService i IAnotherService jest zrobić zależnościach inwersji.

Zdecydowanie polecam połączyć to ze strukturą wtrysku zależności. Jest wiele dostępnych, ale jeden polecam to MEF. MEF jest wbudowany w framework .net. Na przykład Twój kod będzie wyglądać tak z MEF

[Export(typeof(ISomeService))] 
public class SomeService : ISomeService { 
} 


public class SomeClass { 

    [Import] 
    public ISomeService SomeService {get; set;} 

    [Import] 
    public IAnotherService AnotherService {get; set;} 

} 

Teraz MEF rzeczywiście zapewnić swoją SomeService Właściwości AnotherService są wypełnione, gdy klasa jest tworzony.Wykona (jeśli będzie to konieczne) instancję SomeService, wypełni wszystkie jej zależności i umieści ją we właściwej właściwości. Możesz nawet kontrolować, czy chcesz, aby twoje usługi były tworzone jako pojedyncze lub jako nowa instancja usługi za każdym razem, gdy jej potrzebujesz.

więcej szczegółów na MEF można szukać tutaj https://msdn.microsoft.com/en-us/library/ee155691(v=vs.110).aspx

To powinno unikać pisania wielu konstruktorów, które robią nic innego niż usługi inicjalizacji.

+0

Używam simpleinjectora. Nie pytałem, jak to zrobić. Wydaje się, że to, co robisz, jest tylko zastrzykiem własności, którego chcę uniknąć, ponieważ zachęca do takich klas jak Bóg. –

+0

byłeś pytany, jak uniknąć pisania żmudnych bojlerów. Jeśli mam właściwość IGodService lub dodaję IGodService jako argument do konstruktora. Każda z nich pozwala programistce pisać słaby kod. W ten sposób (propertyInjection) po prostu unikasz tablicy podstawowej – Batavia

+0

Masz rację co do żmudnych bojlerów, dzięki za sugestię. Chodziło mi o to, że sama klasa (do której wstrzykuje się) jest bardziej prawdopodobna, że ​​stanie się klasą godną z zastrzykiem własności, ponieważ nie widzisz, ile zależności faktycznie wstrzykujesz. Nie jest to złe per se (to zupełnie nowa dyskusja) i na pewno odpowiednia odpowiedź, po prostu nie to, czego szukam. –

Powiązane problemy