Подтвердить что ты не робот

Фрагмент кода зависимостей конструктора в visual studio

Я нахожу, что добавляю зависимости к конструкторам так:

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

Они довольно утомительны, чтобы писать, я искал фрагменты кода в visual studio, чтобы автоматически добавить их в конструктор, но не нашел их.

Я хочу:

  • При добавлении зависимости к конструктору некоторый фрагмент автоматически создает локальную переменную и присваивает ей.

ИЛИ

  • Добавьте приватную переменную, а затем некоторый фрагмент автоматически добавит его в конструктор и назначит его локальной переменной.
4b9b3361

Ответ 1

Если у вас R #, вы можете ввести декларации полей, а затем выделить их и нажать Alt-Enter, что даст вам возможность генерировать конструктор и назначения полей.

введите описание изображения здесь

Ответ 2

Если у вас нет Resharper, вы можете добавить параметр в конструктор, записать назначение на неиспользуемое свойство и нажать CTRL +., Это даст вам возможность автоматически создавать для вас свойство или поле.

Например, у вас есть этот класс:

public class MyClass 
{ 
    public MyClass()
    { 
    }
}

Затем вы добавляете параметр в конструктор и задание:

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

И нажмите CTRL+. в то время как на линии asignament и выберите создать поле, и вы получите следующее:

public class MyClass 
{         
    IDependency myDependency;

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

Ответ 3

Вы можете легко добавлять фрагменты кода по своему усмотрению, определяя его в XAML и добавляя его в editior, вы можете использовать держатели мест, такие как "имя класса", чтобы использовать его в качестве конструктора, например, а затем поместить в него переменные как статический текст

Я не хочу писать код, потому что он дублируется вы можете проверить, как это сделать здесь: https://msdn.microsoft.com/en-us/library/ms242312.aspx?f=255&MSPPError=-2147217396

вы также можете увидеть этот вопрос: Как я могу автоматически создать конструктор, который бесплатно получает и сохраняет службы?

Ответ 4

то, что вы пытаетесь сделать с ISomeService и IAnotherService, - это сделать инверсию зависимостей.

Я бы настоятельно рекомендовал вам объединить это с каркасом внедрения зависимостей. Есть много доступных, но я бы рекомендовал MEF. MEF встроен в инфраструктуру .net. Например, ваш код будет выглядеть так: MEF

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


public class SomeClass {

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

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

}

Теперь MEF фактически гарантирует, что ваши свойства SomeService и AnotherService будут заполнены, когда ваш класс будет создан. Он построит (при необходимости) экземпляр SomeService, заполнит все его зависимости и поместит в нужное свойство. Вы можете даже контролировать, хотите ли вы, чтобы ваши службы создавались как одиночные или как новый экземпляр службы каждый раз, когда вам это нужно.

для более подробной информации о MEF вы можете посмотреть здесь https://msdn.microsoft.com/en-us/library/ee155691(v=vs.110).aspx

Это должно избегать написания многих конструкторов, которые ничего не делают, кроме инициализации служб.

Ответ 5

Telerik JustCode может делать именно то, что вам нужно.
если у вас есть неиспользуемый аргумент в конструкторе, вы можете создать поле и инициализировать его. http://www.telerik.com/products/justcode/quick-fixes.aspx