Вместо этого вы должны использовать внедрение зависимостей.В большинстве DI-фреймворков есть плагины, благодаря которым вы можете просто изменить файл .svc, указав фабрику хоста.Тогда ваш код может выглядеть примерно так:
private IColumnRepository _columnRepository;
public MyWebService(IColumnRepository columnRepository)
{
_columnRepository = columnRepository;
}
[WebMethod]
public void DeleteColumn(long columnId)
{
_columnRepository.DeleteColumn(columnId);
}
Редактировать
Извините, я не осознавал, что это ASMX.Если у вас есть возможность, вы должны переключиться на WCF.Согласно MSDN :
Эта тема относится к устаревшей технологии.Веб-службы XML и клиенты веб-служб XML теперь должны создаваться с использованием Windows Communication Foundation (WCF).
Но даже если вы застряли в ASMX, Dependency Injection является жизнеспособным вариантом.Например, используя Ninject, вы можете сделать что-то вроде этого:
[Inject]
public IColumnRepository ColumnRepository {get;set;}
public MyWebService()
{
Injection.Kernel.Inject(this);
}
[WebMethod]
public void DeleteColumn(long columnId)
{
_columnRepository.DeleteColumn(columnId);
}
Это немного теснее связывает вас с ядром внедрения, но вы все равно получаете многие преимущества внедрения зависимости.