Пример #1
0
        public ResolveableObjectLock(object target, ILockResolver resolver)
        {
            this.target = target;
            this.@lock  = new ReaderWriterLockSlim();

            this.lockFailureResolver = resolver;
        }
Пример #2
0
        public Base(IEnumerable <LockedObject> relatives, ILockResolver resolver)
        {
            LockedObject = new Locked <T>((T)this, relatives, resolver);

            lastId += 1;
            this.id = lastId;
        }
Пример #3
0
        public Locked(
            T model,
            IEnumerable <LockedObject> lockables,
            ILockResolver resolver)
        {
            this.model = model;

            this.relatives = lockables;
            this.lockList  = new ThreadLocal <LinkedList <ILockStateInternal> >(() => new LinkedList <ILockStateInternal>(new Locked().Yield()));

            if (resolver == null)
            {
                this.@lock = new FastObjectLock();
            }
            else
            {
                this.@lock = new ResolveableObjectLock(model, resolver);
            }
        }
Пример #4
0
 public Child(IEnumerable <LockedObject> relatives, ILockResolver resolver)
     : base(relatives, resolver)
 {
 }
Пример #5
0
        public static (Locked <Root>, List <Locked <Parent> >, List <Locked <Child> >) GetHierarchyGraph(ILockResolver resolver)
        {
            var root = GetRoot(resolver);

            var parents =
                Enumerable
                .Range(0, 9)
                .Select(x => new Parent(new[] { root }, resolver).LockedObject)
                .ToList();

            var children =
                parents
                .SelectMany(x =>
            {
                return
                (Enumerable
                 .Range(0, 9)
                 .Select(y => new Child(new[] { x }, resolver).LockedObject));
            })
                .ToList();

            return(root, parents, children);
        }
Пример #6
0
 public static Locked <Child> GetChild(Locked <Parent> parent, ILockResolver resolver)
 {
     return(new Child(parent.Yield(), resolver).LockedObject);
 }
Пример #7
0
 public static Locked <Parent> GetParent(Locked <Root> root, ILockResolver resolver)
 {
     return(new Parent(root.Yield(), resolver).LockedObject);
 }
Пример #8
0
 public static Locked <Root> GetRoot(ILockResolver resolver)
 {
     return(new Root(Enumerable.Empty <LockedObject>(), resolver).LockedObject);
 }