C #: по событию вызова метода? (Рефакторинг моего кода)

#c# #refactoring

#c# #рефакторинг

Вопрос:

У меня есть контроллер, где для каждого действия используется определенный параметр. Также первая строка в каждом методе является общей среди действий.

Например.

 public ActionResult Add(string routeName) //Common parameter
{
    var object = _repository.Get(routeName); //Common line
    ...
}
  

Как я могу реорганизовать это, что позволит мне удалить

 var object = _repository.Get(routeName);
  

и / или параметр, но при этом иметь доступ к ним, как раньше?

Редактировать: я использую IoC для внедрения всех моих репозиториев в класс, поэтому контроллер вроде как недоступен.

Кроме того, я использую маршруты:

Например.

 routes.MapRoute("Object-Add", "{foo}/{object}/add", new { controller = "Object", action = "Add" });
  

Возможно, это тоже проблема?

Комментарии:

1. Является ли имя маршрута статическим? ie. то же самое для каждого вызова, постоянно, каждый раз?

2. @Лассе: Да, это всегда одно и то же.

Ответ №1:

Сделайте «var object» членом вашего класса и инициализируйте его в конструкторе.

Комментарии:

1. и не вызывайте переменную ‘object’.

Ответ №2:

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

 Request.QueryString
  

Ответ №3:

Лучше всего было бы просто сделать это свойством в вашем классе. Я бы использовал отложенную инициализацию, таким образом, объект создается в то же время, что и обычно во время выполнения, но может быть повторно использован в каждом из действий.

Ответ №4:

Что-то вроде этого?

 public class MyClass
{
   private _YourObject;

   public MyClass(string routeName)
   {
      _yourObject =  _repository.Get(routeName);
   }
   public ActionResult Add()
   {
      ...
   }

}