当我没有在Observer上显式调用Dispose时,我很好奇ObservableForProperty生命周期.在这种情况下,我并不关心如何获得订阅太长时间等.
在传统的.NET中如果你有事件,除非你取消订阅它可能会导致内存泄漏,因为你的对象生命周期绑定到事件.例如,如http://msdn.microsoft.com/en-us/magazine/cc163316.aspx中所述:
事件也可以是强根引用,因此可以有助于强引用路径,从而影响对象的生命周期.公共语言运行时(CLR)2.0中的普通事件是事件源和侦听器之间的双向强引用,因此可以使对象(源或侦听器)保持活动,否则应该已经死亡.
在遇到INotifyPropertyChanged对象时查看ReactiveUI代码库,我注意到您正在使用FromEventPattern订阅INotifyPropertyChange事件.
使用ObservableForProperty是否可以解决这个问题,即通过创建强引用路径来保持对象的存活时间更长?
谢谢,格伦
我试图第一次使用WhenAnyObservable.
当ReactiveList Count == 0且tipText长度> 0时,我想在订阅中将本地值设置为true,或者相反.
this.ViewModel.WhenAnyObservable(
x => x.AutoCompleteItems.CountChanged,
x => x.ObservableForProperty(y => y.TipText),
(countChanged, tipText) => countChanged == 0 && tipText.Length > 0);
Run Code Online (Sandbox Code Playgroud)
我无法让这个工作.
有什么技巧我应该做,或者我应该使用其他WhenAny命令之一?
我在ReactiveUI中使用内置的依赖项注入器/ splat注入器。
我有要传递其适用的数据存储库的构造函数。
在其他框架中,它仅对接口使用反射,并使用GetServices调用来满足那些构造函数要求。例如,目前我具有用于创建类的此辅助程序扩展方法:
/// <summary>
/// Helper class for having a object's constructor automatically assigned by a "GetService" request.
/// </summary>
/// <param name="resolver">The resolver.</param>
/// <param name="type">The type to register.</param>
public static void Register<TConcrete, TInterface>(this IMutableDependencyResolver resolver)
where TConcrete : class
{
var concreteType = typeof(TConcrete);
// Must be a single constructor
var constructors = concreteType.GetConstructors().Single();
IList<object> values = new List<object>();
foreach (var parameter in constructors.GetParameters())
{
if (parameter.ParameterType.IsInterface == false)
{
throw new InvalidOperationException($"The type {concreteType.Name} has …Run Code Online (Sandbox Code Playgroud)