问题标签 [transient]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
602 浏览

webforms - Windsor Castle IoC 线程安全静态变量

我有一个问题要问国际奥委会专家。我正在与一位同事一起围绕温莎城堡 IoC 进行思考。我们对 asp.Net webforms 中的静态域服务对象有不同的看法。我们的基础设施层中有一个名为 BLServiceFactory 的静态工厂,用于检索容器。

}

我们正在像这样在我们的代码后面从工厂中提取实例。

对我来说,这看起来我们将为每个会话提供相同的实例。那确实很糟糕!我的同事认为,由于我们所有的域服务都标记为瞬态,因此每个页面请求都会获得一个新实例。

我还阅读了一些关于由于标记为瞬态的对象未释放用于垃圾收集而导致的内存泄漏。最新版本的温莎城堡是否已解决此问题,还是我应该明确释放对象?当然,就目前而言,所有对象都是静态的,这无关紧要。

0 投票
1 回答
850 浏览

castle-windsor - 在 IoC 中具有瞬态生活方式的 AutoMapper 类

我正在使用 AutoMapper 将域实体映射到 Asp.Net MVC 应用程序中的视图模型。我在 Castle Windsor 中注册了这些映射类,因此它们可用于控制器通过依赖注入。这些映射类有一个虚拟的 CreateMap 方法,我可以在其中覆盖 AutoMapper 的映射,告诉它如何将字段从实体映射到视图模型,忽略哪些字段,指向转换数据的方法等。所有这些都运行良好; 向 AutoMapper 背后的人们致敬!

到目前为止,我一直在 Windsor 中使用 Singleton 生活方式注册映射类,但其中一个需要使用来自 Rhino.Security 的 IAuthorizationRepository,它需要将其组件注册为 Transient。这迫使我将映射类也注册为瞬态,因为持有对瞬态 IAuthorizationRepository 的引用的单例映射类在第二次使用映射器时会导致问题(即,ISession 已关闭错误)。

将所有这些映射类注册到一个 Transient 生活方式是否会浪费资源,这会导致映射类被实例化,并且每次系统想要将域实体映射到视图模型时都会运行 CreateMap 方法?

或者我应该尝试找到一种方法将 IAuthorizationRepository 与映射类分开,以便我可以将映射类保持为单例?

谢谢丹

0 投票
1 回答
362 浏览

.net - 避免在 nhibernate 中出现重复的瞬态实例

我的主要实体(帐户)图如下所示:

帐户

  • 经理
  • 销售员
  • 商人

Manager、SalesPerson 和 Trader 实体是 person 类型。现在,在创建主要实体(以及内部实体)时,如果它不存在,我需要创建一个新的 Person。这引入了一个问题,如果同一个(新)人应该与销售人员和交易员相关联,我希望创建的同一个临时实体与两者相关联。但相反,我最终创建了 Person 对象的重复瞬态实例,这在系统中创建了重复项。我怎样才能避免这种情况?

0 投票
1 回答
768 浏览

spring - Castle Windsor - 瞬态实例的查找方法注入

简短的问题:
Castle Windsor 是否有类似于 Spring.Net 的“查找方法注入”的东西,可以从 XML 配置,它提供了从容器中获取瞬态实例的能力,而类不知道 IoC 容器?

长问题:
我是 Spring/Spring.Net 的长期用户,我一直在尝试使用 Castle Windsor,尝试将项目移植到它上面。Spring.Net 有一个“查找方法注入”的概念(来自 Spring 文档)......

查找方法注入是容器覆盖容器管理对象上的方法的能力,以返回在容器中查找另一个命名对象的结果。查找通常涉及原型对象,如上一节中所述。Spring 框架通过使用 System.Reflection.Emit 命名空间中的类动态生成覆盖该方法的子类来实现此方法注入。

这意味着,如果我有以下...

我可以指示 Spring 覆盖 CreateTransient 方法,并让该方法在每次调用该方法时返回一个新容器创建的瞬态实例(初始化它的依赖项)。其独特之处在于,它不需要直接链接到 Spring 框架(例如,SomeClass 不必实现特定的接口)。

Castle Windsor 中是否有类似的东西可以通过 XML 实现这一点?

(我最终会远离 XML 配置,但目前我只是想让它运行)

0 投票
2 回答
2084 浏览

.net - 在 NHibernate 中正确处理瞬态实体

引用已经存在于不同会话中但在会话关闭后在内存中保持不变的实体的正确方法是什么?

一旦 NH 在单个会话中保留一个实体并且该会话关闭,我需要在新会话中再次获取它,以便在其他一些临时实体中引用它。或者,我可以调用Session.Lock新的会话实例并让 NH 知道这个实体不是瞬态的。此项目在应用程序生命周期内不应更改。

首选的使用方式是什么?还有其他方法吗?

[编辑]

另一个问题是我使用的是存储库模式,而不是直接在我的业务层中使用 NH。这意味着我还需要有一种方法来抽象这个对 Session.Lock 的调用,即在我的存储库接口中有一个类似于 Session.Lock 的方法。恕我直言,这有点臭。

0 投票
1 回答
1802 浏览

nhibernate - NHibernate - 将特定属性标记为“脏”

我正在开发一个 NHibernate 项目,并且有一个关于更新瞬态实体的问题。

基本上工作流程如下:

  1. 创建一个 DTO(投影)并通过网络发送给客户端。这具有来自实体的一小部分属性。
  2. 客户端发回更改后的 DTO
  3. 将 DTO 属性映射回适当的实体,以便 NH 生成和执行 UPDATE 语句。
  4. 保存实体

第 4 点是我遇到问题的地方。目前我可以使用 session.Merge() 方法来实现这个更新,但是在更新之前它必须首先从数据库加载实体(假设没有 2LC)。因此,select 和 update 语句都会被触发。

我想做的是创建实体的临时实例,从 DTO 映射新值,然后让 NH 仅使用我更改的属性生成 SQL 语句。额外的选择应该是不必要的,因为我已经有了实体 ID 和 SET 子句所需的值。这在NH可能吗?

当前使用 session.Update(),所有属性都将包含在更新语句中,并且由于不属于 DTO 的未初始化属性而引发异常。

本质上,我需要一种方法来指定哪些实体属性是脏的,因此只有这些属性包含在更新中。

== 编辑 ==

例如...

和测试用例。

我希望生成类似于“UPDATE Persons SET Firstname = 'Bob' WHERE PersonID = 1”的 SQL 语句。相反,由于 BirthDate 未初始化,我得到了 DateTime 超出范围的异常。它不需要 BirthDate,因为 SQL 语句不需要它。也许这是不可能的?

== /编辑 ==

在此先感谢,约翰

0 投票
1 回答
654 浏览

cocoa - 核心数据 - 我可以将计算值存储为持久属性吗?

背景

  • 我有一个存储在瞬态属性中的计算值。
  • 每次我的应用程序启动时,都需要更新瞬态。
  • 启动时间真的很慢(即10-15秒)
  • Instruments 确认更新非常昂贵。

问题

可以将计算值存储在持久属性中吗?

我会使用Martin Brugger 的 Dependent Properties来保持计算的值是最新的。

更多信息

我计算的值是数千个对象的持续时间:

我试过的

  • 我已经使用预取最小化了触发的故障数量,setReturnsObjectsAsFaults:NO但它使用了大量内存并且仍然需要很长时间。

  • 我已经使我的瞬态更新代码尽可能高效。

  • 我知道我可以在后台线程上获取并使用进度条,但我希望用户根本不必等待。

0 投票
1 回答
602 浏览

hibernate - 检查 PrimaryKeyJoinColumn 的可空性

我有一个具有 ObjectX 属性的实体类:

这个 ObjectX 不能为空?

在 Hibernate 3.4 中,我可以毫无问题地将这个对象保存在存储库中,但现在在 Hibernate 3.6 中,它抛出了这个异常:

0 投票
3 回答
1050 浏览

java - 带有定时/瞬态条目的映射 - 内存不是问题

我正在尝试创建一个地图,其中条目超时并在一段时间后被删除。

基本上,<K, V> Map.put(K key, V value, long **time**)- 条目将立即放入地图中,并在时间(毫秒)后过期。我不需要在将来的任何时候恢复已删除的条目,但我想确保它不再在地图中。

例如:map.put("foo", "bar", 60l * 1000l)将让这个键值对在地图中存在一分钟(60long 和 1000long)。

尝试:使用 ConcurentMap 并Map.put(K key, V value, long **time**)通过以下方式实现:
1. 调用super.put(key, value)
2. 创建一个休眠时间(毫秒)的线程
3. 调用remove(key)以删除条目。

问题:请评论/让我知道这在线程安全、一致性或我尝试中的任何缺陷方面是否是一个好主意。如果您认为有更好的方法来实现这一点,请提供任何建议。

编辑:感谢您的回复,内存不是这里的问题,我真的只关心条目的短暂生命周期。谢谢你。

0 投票
2 回答
13844 浏览

java - Java:静态瞬态字段

我刚刚发现在 Java 中你可以声明一个字段“静态瞬态”——编译器不会抱怨。众所周知,这似乎没有任何用处,因为静态字段没有序列化。

但我想知道,实际上是否存在“静态瞬态”字段有用的情况?