Jak przypisać wartość domyślną do właściwości

CustomerService jest usługą internetową i jest wywoływana pomyślnie, ale nie mogę uzyskać dostępu do SelectCommand w metodzie Any. Myślę, że coś tu brakuje, czy ktoś mógłby zasugerować.

public class CustomerService : Service
{
  private readonly IDbConnection _dbConnection; // injected successfully
  public ServiceCommand SelectCommand {get;set;}

  public CustomerService(IDBConnection dbConnection)
  {        
         _dbConnection = dbConnection;            
  }

  public Customer Any(CustomerRequest request)
  {
       //_dbconnection is available           

       //but selectcommand is null here   

       //db operations     

  }
}


[Route("/customers")]
public class CustomerRequest
{
    public string name { get; set; }
}

public class ServiceCommand
{
    public string SQL { get; set; }        
    public CommandType CommandType { get; set; }

    public ServiceCommand()
    {
        CommandType = CommandType.Text;
    }
}

Zainicjowałem połączenie, dziedziczącAppHostBase

  public override void Configure(Container container) {
        container.Register<IDbConnectionFactory>(
          c => new OrmLiteConnectionFactory(ConfigurationManager.ConnectionStrings["default"].ConnectionString,
                                            SqlServerDialect.Provider));

        container.Register<IDbConnection>(c => c.Resolve<IDbConnectionFactory>().OpenDbConnection()).ReusedWithin(ReuseScope.Request);
      }

Kiedy próbowałem napisać test jednostkowy, ustawiając wyraźnie SelectCommand, działa. Ale nie jestem w stanie przetestować, jak to działa, nie ustawiając wartości, założyłem, że przyjmuje domyślną wartość ustawioną w konstruktorze.

 var service = new CustomerService(InMemoryTestDatabase.OpenDbConnection());
 service.SelectCommand = new ServiceCommand() { SQL = "SELECT * FROM customers" };

Edytować

IDbConnection w konstruktorze działa dobrze, ale mój problem dotyczy SelectCommand, który jest tutaj własnością publiczną. Moim zamiarem jest, jeśli usługa jest wywoływana normalnie, trafiłbym do rzeczywistej bazy danych, ustawiając w konstruktorze zapytanie jak poniżej.

SelectCommand = new ServiceCommand() {Text = "sp_getcustomers"};

Ale kiedy go przetestuję, ustawię go na bazę danych sqllite i zmienię zapytanie na tabelę „select * from clients”, ponieważ sqllite nie obsługuje sp. Jak wspomniano testy jednostkowe działają dobrze, ale usługa nie jest w stanie zainicjować właściwości publicznych.

Jeśli zainicjalizuję prywatną właściwość tylko do odczytu, taką jak _dbConnection, jak poniżej, to działa dobrze, ale chciałbym jawnie wprowadzić polecenie dla usługi.

private readonly IDbConnection _dbConnection;
private readonly ServiceCommand _selectCommand;
public CustomerService(IDBConnection dbConnection)
{
   __dbConnection = dbConnection;
   _selectCommand = new ServiceCommand(){Text = "sp_getCustomers"};
}

questionAnswers(1)

yourAnswerToTheQuestion