2013-09-06 4 views
1

У меня есть необходимость расширения службы/IService, чтобы я мог регистрировать дополнительные ресурсы, такие как другие соединения БД и пользовательские классы, которым может понадобиться каждая отдельная служба.Расширение службы/IService для добавления общих зависимостей

Правильный способ сделать это для подкласса Service? Кроме того, мне непонятно, есть ли у меня другое (скажем) IDbConnection, как Funq определяет, какое свойство вводит значение.

ответ

0

Вы можете легко настроить другие подключения к БД без расширения Сервиса, но просто подключив их в методе configure в файле AppHost.cs.

2

Если у вас несколько сервисов одного типа, вам необходимо зарегистрировать их в funq с именем. К несчастью, я не думаю, что funq может автоматически авторизовать свойства, поэтому вам нужно их вручную разрешить.

 
    container.Register<DataContext>("Security", x => new SecurityDataContext()); 
    container.Register<DataContext>("Customers", x => new CustomersDataContext()); 
    container.Register<DataContext>("Reporting", x => new ReportingDataContext()); 

    container.Register<IReportRepository>(x => new ReportRepositoryImpl(x.ResolveNamed<DataContext>("Reporting"))); 

Альтернативный подход должен был бы создать уникальный интерфейс (даже если он не имеет членов) для каждого типа, а затем использовать это в funq. Это позволит автоматического связывания

 
    container.Register<ISecurityDataContext>(x => new SecurityDataContext()); 
    container.Register<ICustomersDataContext>(x => new CustomersDataContext()); 
    container.Register<IReportingDataContext>(x => new ReportingDataContext()); 

    // this could just be autowired 
    container.Register<IReportRepository>(x => new ReportRepositoryImpl(x.Resolve<IReportingDataContext>())); 

Если вы все еще действительно нужно продлить службу, вы можете просто использовать стандартное наследование в C#

 
    public abstract class BaseService : Service 
    { 
     // custom things go here 
     public string Example() { 
      return "Hello World"; 
     } 
    } 

    public class ReportsService : BaseService 
    { 
     public string Get(ListReports request) { 
      return Example(); 
     } 
    } 
Смежные вопросы