Базовый класс из службы Windows

Я пытаюсь создать базовый класс для службы Windows. При создании это создается автоматически:

     public partial class Service1 : ServiceBase
     {
     public class Base    //added this to become a Base class
     {
        protected override void OnStart(string[] args)//generated code for Service
        {
          //a bunch of code here that I create
         }
     }
     }

И я хочу получить этот класс:

     public class Derived : Base
      {

       void Call(string[] args)
         {
            Call test = new Call();
            test.OnStart(args);///error says no suitable method found to override
         }
      }

Причина, по которой я хочу это сделать, заключается в том, что эта служба будет взаимодействовать с несколькими типами баз данных, и я хочу иметь как можно больше повторно используемого кода, каждая из которых будет иметь одинаковые OnStart, OnStop и т. Д. Я пробовал использовать виртуальные , protected, public в производном классе. Я также не могу изменить сгенерированный код.

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


person user3825831    schedule 16.07.2014    source источник
comment
По какой причине вы создаете экземпляр Dervied внутри класса Derived вместо доступа к экземпляру this?   -  person Bryan Crosby    schedule 16.07.2014
comment
Нет, это был просто мозговой пердун, спасибо   -  person user3825831    schedule 16.07.2014


Ответы (1)


После редактирования: вы должны унаследовать от ServiceBase. Простое создание общедоступного класса внутри области Service1 не создает наследования. Правильное определение:

public class Derived : ServiceBase
{
    protected override void OnStart(string[] args)
    {
        //example
        int x = 1;

        //call the base OnStart with the arguments
        base.OnStart(args);
    }
}

Затем внутри вашего класса Program вы должны создать такую ​​оснастку для его запуска:

var servicesToRun = new[]
{
    new Derived()
};
ServiceBase.Run(servicesToRun);

Ссылка MSDN здесь

Защищенный метод OnStart требует аргумента string[] args в соответствии с приведенным выше кодом. Вам нужно передать массив аргументов.

person Bryan Crosby    schedule 16.07.2014
comment
Хорошо, поэтому я понимаю ваш ответ, Derived: ServiceBase не тот, который создается автоматически, это тот, который я создаю, это правильно? - person user3825831; 16.07.2014