1

我需要扩展 Service/IService 以允许我注册其他资源,例如每个单独的服务可能需要处理的其他数据库连接和自定义类。

对服务进行子类化的正确方法是什么?此外,我不清楚我是否还有另一个(比如) IDbConnection,Funq 如何确定将值注入哪个属性。

4

2 回答 2

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());

    // 这可能只是自动装配的
    container.Register<IReportRepository>(x => new ReportRepositoryImpl(x.Resolve<IReportingDataContext>()));

如果您仍然真的需要扩展服务,您可以在 c# 中使用标准继承

    公共抽象类 BaseService : 服务
    {
         // 自定义的东西放在这里
         公共字符串示例(){
             返回“你好世界”;
         }
    }

    公共类 ReportsService : BaseService
    {
        公共字符串获取(列表报告请求){
            返回示例();
        }
    }
于 2013-09-06T13:39:52.777 回答
0

您可以在不扩展 Service 的情况下轻松配置其他 DB 连接,只需在AppHost.cs文件中的 configure 方法中连接它们即可。

于 2013-09-06T13:00:30.720 回答