Ответ 1
Если у вас R #, вы можете ввести декларации полей, а затем выделить их и нажать Alt-Enter
, что даст вам возможность генерировать конструктор и назначения полей.
Я нахожу, что добавляю зависимости к конструкторам так:
public class SomeClass() {
private ISomeService _service;
private IAnotherService _anotherService;
public SomeClass(ISomeService service, IAnotherService anotherService) {
_service = service;
_anotherService = anotherService;
}
}
Они довольно утомительны, чтобы писать, я искал фрагменты кода в visual studio, чтобы автоматически добавить их в конструктор, но не нашел их.
Я хочу:
ИЛИ
Если у вас R #, вы можете ввести декларации полей, а затем выделить их и нажать Alt-Enter
, что даст вам возможность генерировать конструктор и назначения полей.
Если у вас нет 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;
}
}
Вы можете легко добавлять фрагменты кода по своему усмотрению, определяя его в XAML и добавляя его в editior, вы можете использовать держатели мест, такие как "имя класса", чтобы использовать его в качестве конструктора, например, а затем поместить в него переменные как статический текст
Я не хочу писать код, потому что он дублируется вы можете проверить, как это сделать здесь: https://msdn.microsoft.com/en-us/library/ms242312.aspx?f=255&MSPPError=-2147217396
вы также можете увидеть этот вопрос: Как я могу автоматически создать конструктор, который бесплатно получает и сохраняет службы?
то, что вы пытаетесь сделать с 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
Это должно избегать написания многих конструкторов, которые ничего не делают, кроме инициализации служб.
Telerik JustCode может делать именно то, что вам нужно.
если у вас есть неиспользуемый аргумент в конструкторе, вы можете создать поле и инициализировать его.
http://www.telerik.com/products/justcode/quick-fixes.aspx