public long Create(Type resourceType, Action <Resource> initializer)
        {
            ValidateHealthState();

            var resource = TypeController.Create(resourceType.ResourceType());

            initializer(resource);
            ResourceGraph.Save(resource);
            return(resource.Id);
        }
        public bool Delete(long id)
        {
            ValidateHealthState();

            var resource = ResourceGraph.Get(id);

            if (resource == null)
            {
                return(false);
            }

            return(ResourceGraph.Destroy(resource));
        }
        public TResult Read <TResult>(long id, Func <Resource, TResult> accessor)
        {
            ValidateHealthState();

            var resource = ResourceGraph.Get(id);

            if (resource == null)
            {
                throw new KeyNotFoundException($"No resource with Id {id} found!");
            }

            var result = accessor(resource);

            return(result);
        }
        public void Modify(long id, Func <Resource, bool> modifier)
        {
            ValidateHealthState();

            var resource = ResourceGraph.Get(id);

            if (resource == null)
            {
                throw new KeyNotFoundException($"No resource with Id {id} found!");
            }

            var result = modifier(resource);

            if (result)
            {
                ResourceGraph.Save(resource);
            }
        }
 public IEnumerable <TResource> GetResources <TResource>() where TResource : class, IPublicResource
 {
     ValidateHealthState();
     return(ResourceGraph.GetResources <TResource>().Proxify(TypeController));
 }
 public TResource GetResource <TResource>(Func <TResource, bool> predicate)
     where TResource : class, IPublicResource
 {
     ValidateHealthState();
     return(ResourceGraph.GetResource(predicate).Proxify(TypeController));
 }
 public TResource GetResource <TResource>(ICapabilities requiredCapabilities)
     where TResource : class, IPublicResource
 {
     ValidateHealthState();
     return(ResourceGraph.GetResource <TResource>(r => requiredCapabilities.ProvidedBy(r.Capabilities)).Proxify(TypeController));
 }
 public TResource GetResource <TResource>(string name)
     where TResource : class, IPublicResource
 {
     ValidateHealthState();
     return(ResourceGraph.GetResource <TResource>(name).Proxify(TypeController));
 }
 public IEnumerable <TResource> GetAllResources <TResource>(Func <TResource, bool> predicate)
     where TResource : class, IResource
 {
     ValidateHealthState();
     return(ResourceGraph.GetResources(predicate));
 }