【问题标题】:Are StructureMap profiles thread safe?StructureMap 配置文件线程安全吗?
【发布时间】:2009-09-30 06:36:05
【问题描述】:

我正在考虑使用 StructureMap 的配置文件来帮助根据经过身份验证的用户类型在我的网络应用程序中提供细微的行为差异。我的问题是,如果我做类似的事情

ObjectFactory.Profile = Session["UserType"];

在基于配置文件解决问题时,它会是线程安全的,还是同时请求可能会相互干扰?

【问题讨论】:

    标签: .net thread-safety structuremap


    【解决方案1】:

    静态 ObjectFactory 外观上的操作都是“线程安全的”。这意味着您可以安全地在不同线程上调用它们,而不会破坏 ObjectFactory 的内部状态。

    但是,您要问的是每个线程是否都有自己的 ObjectFactory 个人副本,答案是否定的。您在任何线程上对 ObjectFactory 所做的任何更改都将反映在 AppDomain 内的所有其他线程中。

    配置文件功能可能不是您正在寻找的解决方案。您可能想要使用命名实例之类的东西:

    ObjectFactory.GetInstance<ISomeService>( Session["UserType"] );
    

    还有其他可能的解决方案,具体取决于您要执行的操作。考虑发布一个关于您要解决的问题的问题,例如:“我如何根据当前用户的 UserType 获得不同的行为...”

    【讨论】:

    • 谢谢 Josuah,但我很好奇为什么 Profiles 是错误的功能?如果整个图根据我设置的 ObjectFactory.Profile 不同怎么办?相反,如果我的示例是将 ObjectFactory.Profile 设置为在控制器操作中以不同方式硬编码的内容(我认为不是问题的相同潜在线程问题),您的答案会有所不同吗?
    • 这是个问题。我假设您在谈论网络环境。来自所有用户的每个 Web 请求都共享一个 ObjectFactory 实例。如果您在一个用户的请求中更改个人资料,任何并发请求(其他用户)也将更改他们的个人资料,这显然不是您想要的。如果您确实需要更改每个请求的整个图表,您可以使用新的嵌套容器功能来完成它。同样,我只是推测,不知道您要解决的问题。
    • 谢谢,我想我误解了你的原始答案,现在说得通了。
    • 你介意指出我在哪里讨论了“新的嵌套容器功能”。我还没有找到任何叫这个名字的东西,而且对 SM 来说太新了,不知道你在说什么。
    • 顺便说一句,谢谢你的建议,我刚问了这个问题...stackoverflow.com/questions/1499442/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2010-10-29
    • 2022-06-15
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多