using System; namespace RosettaUI { public static class Binder { public static Binder Create(Func getter, Action setter) { return new Binder(Getter.Create(getter), setter); } public static IBinder Create(object obj, Type type) { var binder = Create(() => obj, o => obj = o); var castBinderType = typeof(CastBinder<,>).MakeGenericType(typeof(object), type); return Activator.CreateInstance(castBinderType, binder) as IBinder; } } public class Binder : BinderBase { private readonly Action _setter; public Binder(IGetter getter, Action setter) : base(getter) { _setter = setter; } public override bool IsReadOnly => _setter == null; protected override void SetInternal(T t) { _setter?.Invoke(t); } } }