【问题标题】:Web-forms Initialize services in Page_InitWeb-forms 在 Page_Init 中初始化服务
【发布时间】:2016-03-23 09:52:48
【问题描述】:

我的项目由模型、服务、DAO 存储库、Unity 和 Web 表单部分分隔。在我的页面中,我有许多隐藏的依赖项,我想重构代码。

在我的项目中我有很多这样的

        private DealsService dealsService;
        private DealsParser dealParser;
        private PeopleBinder peopleBinder;
        private DealStatusService dealStatusService;
        private PersonsService personService;
        private PersonalMetricsService metricService;
        private DealRelationsService dealRealtionService;
        private AuditReportService auditService;
        private ProductLineService productLineService;
        private DealProductLineService dealProdLineService;
        private DynamicColumnsService dynamicColService;
        private DealValuesService dealValuesService;

 protected void Page_Init(object sender, EventArgs e)
        {
            dealsService = new DealsService();
            peopleBinder = new PeopleBinder();
            dealParser = new DealsParser();
            dealStatusService = new DealStatusService();
            editDealId = Request.Params["ID"];
            FinancialPeriod = Request.Params["FinancialPeriod"];
            editFYandMonth = FinancialPeriod.Substring(2,7);
            editCountry = Request.Params["Country"];
            personService = new PersonsService();
            metricService = new PersonalMetricsService();
            dealRealtionService = new DealRelationsService();
            employeeService = new EmployeeService();
            auditService = new AuditReportService();
            productLineService = new ProductLineService();
            reports = new List<AuditReport>();
            dealProdLineService = new DealProductLineService();
            dynamicColService = new DynamicColumnsService();
            dealValuesService = new DealValuesService();
           }

现在我开始重构代码并为所有这些服务创建接口并由接口封装。是否可以避免这个 new 关键字?现在我正在实现 IoC 容器。

【问题讨论】:

    标签: c# dependency-injection webforms refactoring


    【解决方案1】:

    当然,使用依赖注入你可以这样做:

    private IDealsService DealsService {get; set;}
    private IDealsParser DealParser {get; set;}
    //etc...
    
    protected void Page_Init(object sender, EventArgs e, IDealsService dealsService, IDealsParser dealParser)
    {
        DealsService = dealsService;
        DealParser = dealParser;
        //etc...
    }
    

    在您决定使用的 DI 配置中。这是一个 Ninject 示例,设置绑定:

    public class Bindings : NinjectModule
    {
        public override void Load()
        {
            Bind<IDealsService>().To<DealsService>();
            Bind<DealsParser>().To<DealsParser>();
        }
    }
    

    一个很好的 Ninject 教程http://blog.agilistic.nl/a-step-by-step-guide-to-using-ninject-for-dependancy-injection-in-c-sharp/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多