c# - 如何使用 caSTLe windsor 将运行时参数传递给先前注册的工厂方法?

标签 c# .net castle-windsor castle

我有一个使用 CaSTLe Windsor 的报告 MVC 应用程序。

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

我需要根据请求中传入的参数将一种依赖类型切换为另一种依赖类型。

我怎样才能做到这一点?

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

如果我尝试为每个请求注册工厂,它​​会在第一个请求上运行,但随后会提示工厂已经注册的所有后续请求。在每次请求后注销工厂听起来不像是正确的做法。

最佳答案

当你需要在运行时解析类型时,正常的解决方案是注入(inject)一个可以在适当的时候做出决定的工厂:

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

以前需要 IReport 的类应该改为需要 IReportFactory

关于c# - 如何使用 caSTLe windsor 将运行时参数传递给先前注册的工厂方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3771557/

相关文章:

c# - mongodb 的 SQL CLR 抛出 'MongoDB.Bson.Serialization.BsonSerializer' 异常

c# - .NET Core 中的环境标记帮助程序

C# 方法信息 getReturnType

c# - AppDomain 和 MarshalByRefObject 生命周期 : how to avoid RemotingException?

c# - 用于 log4net 的 CaSTLe 日志记录工具,具有流畅的 log4net 配置

c# - Async/Await 和 Task<T> 不返回数据

c# - 将 QueryString 参数添加到 GridView ItemTemplate

c# - "The process cannot access the file X because it is used by another process"-C#

caSTLe-windsor - 温莎的通用类型工厂

删除了 C# 和 IoC 传递依赖项