加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何使用castle windsor将运行时参数传递给以前注册的工厂

发布时间:2020-12-16 01:38:17 所属栏目:百科 来源:网络整理
导读:我有一个使用Castle Windsor的报告MVC应用程序. 在应用程序启动时(在global.asax中),所有类型都被注册,然后对应用程序的每个后续请求都会解析相关的报告类型,windsor会自动处理依赖项. 我需要根据请求中传入的参数切换其中一种依赖类型. 我怎样才能做到这一
我有一个使用Castle Windsor的报告MVC应用程序.

在应用程序启动时(在global.asax中),所有类型都被注册,然后对应用程序的每个后续请求都会解析相关的报告类型,windsor会自动处理依赖项.

我需要根据请求中传入的参数切换其中一种依赖类型.

我怎样才能做到这一点?

我已经使用windsor注册了一个工厂方法来处理可切换类型的分辨率但是由于这是在应用程序启动时注册的,当参数仅在以后的请求中可用时,如何将参数传递给工厂方法?

如果我尝试为每个请求注册工厂,它??会在第一次请求时工作,但随后会抱怨工厂已经注册的所有后续请求.在每次请求之后取消注册工厂听起来不是正确的事情.

解决方法

当您需要在运行时解析类型时,通常的解决方案是注入一个可以在适当的时间做出决策的工厂:

public class ReportFactory: IReportFactory {
    IReport CreateReport(bool useDefault) {
        if (useDefault) {
            return new DefaultReport();
        } else {
            return new UnusualReport();
        }
    }
}

以前需要IReport的类应该要求IReportFactory.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读