Вызов функции из другого класса в C # /. NET MVC App - PullRequest
0 голосов
/ 30 августа 2018

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

например, в моем приложении у меня есть профиль пользователя, куда пользователи могут загрузить фотографию профиля. Если они не настраивают свой профиль, я устанавливаю аватар для профиля по умолчанию. Я делаю это с помощью метода, чтобы проверить, является ли их строка профиля изображения нулевой.

Я создал папку с именем HelperMethods и создал класс с именем UserHelperMethods, который в настоящее время имеет одну функцию:

namespace HiRatik.Stories.HelperMethods
{
    public class UserHelperMethods
    {
        //checks if the user's profile pic is null and sets it to default pic if it is
        public string GetUserProfilePic(ApplicationUser user)
        {
            if (user.ProfilePic == null)
            {
                user.ProfilePic = "profile_pic_default.png";
            }

            return user.ProfilePic;
        }
    }
}

enter image description here

Теперь в контроллере, в папке контроллера, я добавил using HiRatik.Stories.HelperMethods;

и попытался вызвать публичную функцию GetUserProfilePic из UserController. Но я получаю ошибку при реализации. Я хотел бы иметь возможность поместить множество этих общих функций, связанных с пользователями, в другой класс, например UserHelperMethods, для очистки объема в контроллере, но я что-то упускаю в реализации. Оператор using в верхней части выделен серым цветом, поэтому он не отвечает на вызов функции. Есть идеи?

enter image description here

Ответы [ 5 ]

0 голосов
/ 30 августа 2018

Я бы хотел сделать эти методы статичными.

namespace HiRatik.Stories.HelperMethods
{
    public class UserHelperMethods
    {
        //checks if the user's profile pic is null and sets it to default pic if it is
        public static string GetUserProfilePic(ApplicationUser user)
        {
            if (user.ProfilePic == null)
            {
                user.ProfilePic = "profile_pic_default.png";
            }

            return user.ProfilePic;
        }
    }
}

Если вспомогательные методы не зависят от какого-либо состояния внутри объекта UserHelperMethods, это значительно облегчит вызов ваших методов из любого места, поскольку больше нет необходимости создавать экземпляр UserHelperMethods тип. Вы можете вызвать метод следующим образом.

UserHelperMethods.GetUserProfilePic(foundUser);
0 голосов
/ 30 августа 2018

просто создайте экземпляр класса

var myInstance = new UserHelperMethods();

, затем просто используйте myInstance объект для доступа к функциям UserHelpMethods класса

так что вы можете вызывать любую функцию в UserHelpMethods, как это

myInstance.FunctionName();

так что в вашем случае это будет похоже на

myInstance.GetUserProfilePic(foundUser);
0 голосов
/ 30 августа 2018

Вы можете сделать это расширением. Тогда вы сможете назвать это так:

user.GetProfilePic();

Изменения, которые вы должны сделать, это сделать статический класс и метод и иметь ключевое слово this перед параметром. Что-то вроде

public static class ApplicationUserExtensions
    {
        //checks if the user's profile pic is null and sets it to default pic if it is
        public static string GetProfilePic(this ApplicationUser user)
        {
            if (user.ProfilePic == null)
            {
                user.ProfilePic = "profile_pic_default.png";
            }

            return user.ProfilePic;
        }
    }
0 голосов
/ 30 августа 2018

вы можете обновить свой код до одного из следующих A -

namespace HiRatik.Stories.HelperMethods
{
    public class UserHelperMethods
    {
         private static UserHelperMethods _instance = null;
         public static UserHelperMethods Instance()
         {
           if(_instance == null)
           {
             _instance = new UserHelperMethods();
           }
           return _instance;
         }
        //checks if the user's profile pic is null and sets it to default pic if it is
        public string GetUserProfilePic(ApplicationUser user)
        {
            if (user.ProfilePic == null)
            {
                user.ProfilePic = "profile_pic_default.png";
            }

            return user.ProfilePic;
        }
    }
}

и внутри вашего контроллера просто используйте вызов, как это

UserHelperMethods.Instance().GetUserProfilePic(founduser);

Или самый простой способ

var helperObj = new UserHelperMethods();
helperObj.GetUserProfilePic(founduser);

diff, вам не нужно постоянно создавать экземпляр в контроллерах diff

Я хочу, чтобы это помогло тебе !!

0 голосов
/ 30 августа 2018

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

UserHelpMethods helper = new UserHelperMethods();

тогда вы можете использовать его как:

helper.GetUserProfilePic(foundUser);
...
help.DoSomethingImportant(foundUser);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...