Если у вас несколько сервисов одного типа, вам необходимо зарегистрировать их в 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();
}
}