marry
marry

Reputation: 173

Passing variable from command handler

I have a following method in my command handler that gets variables from another method,im trying to pass those variable into the CreateUser(NewAccount); method but it always comes back as null

public async Task ExecuteAsync(CreateUserAccountCommand command)
{
    var result = await _client.CreateUser(GetAccountFrom(command)); // so this line gets the variables from GetAccountFrom(command) 
   _httpContextAccessor.HttpContext.Items["CreateUserAccountCommand"] = result;
}

private Account GetAccountFrom(CreateUserAccountCommand command)
{
    var NewAccount = new Account();
    NewAccount.FirstName = command.FirstName;
    NewAccount.LastName = command.LastName;
    return NewAccount()
}

however when i call CreateUser to pass in the variables into NewAccount thats coming from GetAccountFrom(command) it passes it in as a null

 public System.Threading.Tasks.Task<Account> CreateUser(Account NewAccount,)
 {
     return base.Channel.CreateUser(NewAccount);
 }

What am i doing wrong?

Upvotes: 0

Views: 308

Answers (3)

Piotr Kula
Piotr Kula

Reputation: 9841

Your code has many anti patterns but it seems like you have a method somewhere in the base newAccount(); This is why inheritance should be avoided (for beginners and mids)

also the convention for private local variables lowercase.. as to NOT CONFUSE yourself.

private Account GetAccountFrom(CreateUserAccountCommand command)
{
    var newAccount = new Account();
    newAccount.FirstName = command.FirstName;
    newAccount.LastName = command.LastName;
    return newAccount;
}

or to completely avoid confusion just do this

private Account GetAccountFrom(CreateUserAccountCommand command)
{
    return new Account{
        FirstName = command.FirstName,
        LastName = command.LastName,
    }
}

But to avoid anti-patterns and spaghetti code you should really make an extension method which is much more S.O.L.I.D !

namespace you.company
{
  public static CommandExtensions{
    public static Account GetAccountFrom(this CreateUserAccountCommand command)
    {
        return new Account
        {
            FirstName = command.FirstName,
            LastName = command.LastName,
        };
    }
}

Upvotes: 0

Michał Turczyn
Michał Turczyn

Reputation: 37480

You are creating object with new keyword. All you need to do is to return this object from your method with simple call:

return NewAccount;

The way you do it now is that you are returning result of NewAccount() method (whatever it is, apparently null), which is not what you want.

Also you might want to inspect why NewAccount() returns always null.

Upvotes: 1

JLe
JLe

Reputation: 2904

You are creating a new instance of NewAccount in your return statement.

private Account GetAccountFrom(CreateUserAccountCommand command)
{
     var newAccount = new Account();

     newAccount.FirstName = command.FirstName;
     newAccount.LastName = command.LastName;
     return newAccount; // <- Return the variable
 }

Upvotes: 1

Related Questions