vovgou / loxodon-framework

An MVVM & Databinding framework that can use C# and Lua to develop games
MIT License
1.9k stars 362 forks source link

Lua用ToExpression方法进行Bind问题 #9

Closed jdxz9933 closed 4 years ago

jdxz9933 commented 4 years ago

lua执行ToExpression方法时,会传入LuaFunction

 public LuaBindingBuilder ToExpression(LuaFunction expression, params string[] paths)
        {
            if (this.description.Source != null)
                throw new BindingException("You cannot set the source path of a Fluent binding more than once");

            this.description.Source = new LuaExpressionSourceDescription()
            {
                Expression = expression,
                Paths = paths
            };

            return this;
        }

当我执行 SetDataContext时,LuaExpressionSourceProxy会执行Dispose(),将func释放

 protected override void Dispose(bool disposing)
        {
            if (!disposed)
            {
                if (disposing)
                {
                    if (this.inners != null && this.inners.Count > 0)
                    {
                        foreach (ISourceProxy proxy in this.inners)
                        {
                            if (proxy is INotifiable)
                                ((INotifiable)proxy).ValueChanged -= OnValueChanged;
                            proxy.Dispose();
                        }
                        this.inners.Clear();
                    }

                    if (func != null)
                    {
                        func.Dispose();
                        func = null;
                    }
                }
                disposed = true;
                base.Dispose(disposing);
            }
        }

导致下次执行func报错。

vovgou commented 4 years ago

已经修复!