Есть ли способ перехватить вызов метода, не подписывая его на какие-либо события? - PullRequest
0 голосов
/ 22 октября 2018

предположим, что у нас есть такой сценарий:

класс, в который вам запрещено вносить какие-либо изменения:

 public class ForbiddenClass_A
    {

        public void TheMethod()
        {
            //do stuff
        }
    }

и другой класс только для чтения, который вызывает метод из предыдущего класса:

public class ForbiddenClass_B
{
    ForbiddenClass_A fc_a;

    void Update()
    {
        //some logic that if true it will call :
        fc_a.TheMethod();
    }
}

Теперь у вас есть класс, который вы с ним делаете, и по нему вы хотите узнать, если TheMethod () :

public class MyClass
{
    //call this when TheMethod() from ForbiddenClass_A is called.
    public void TheMethod_Catcher()
    {

    }
}

Спасибо!

1 Ответ

0 голосов
/ 22 октября 2018

Есть ли способ перехватить вызов метода, не подписывая его на какие-либо события?

Возможно, отделенный от сообщений обмен сообщениями агрегатор событий или любая другая система обмена сообщениями в пабе.Хотя вам все еще нужно подписаться на что-то, участники не должны знать друг о друге, что позволяет вам сделать методы частными

Unity , MvvmLight оба имеют такие виды систем обмена сообщениями, однако они действительно десятки, их множество

Пример того, как это может работать

public CreateUserForm()
{
    InitializeComponent();
    EventPublisher.Instance.Subscribe<NewUserCreated>
        (n => listBoxUsers.Items.Add(n.User.Name));
}

...

// some other class
private void Update()
{

    var user = new User()
               {
                   Name = textBoxUserName.Text,
                   Password = textBoxPassword.Text,
                   Email = textBoxEmail.Text
               };
    EventPublisher.Instance.Publish(new NewUserRequested(user));
}

Обновление

Существуют методы инъекции, если вы заинтересованы в .net

Динамически заменить содержимое метода C #?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...