DefaultResourceSubSystem
Pendent
using Castle.Core.Resource;
using System;
using System.Collections.Generic;
namespace Castle.MicroKernel.SubSystems.Resource
{
public class DefaultResourceSubSystem : AbstractSubSystem, IResourceSubSystem, ISubSystem
{
private readonly List<IResourceFactory> resourceFactories = new List<IResourceFactory>();
public DefaultResourceSubSystem()
{
InitDefaultResourceFactories();
}
public IResource CreateResource(string resource)
{
if (resource == null)
throw new ArgumentNullException("resource");
return CreateResource(new CustomUri(resource));
}
public IResource CreateResource(string resource, string basePath)
{
if (resource == null)
throw new ArgumentNullException("resource");
return CreateResource(new CustomUri(resource), basePath);
}
public IResource CreateResource(CustomUri uri)
{
if (uri == null)
throw new ArgumentNullException("uri");
foreach (IResourceFactory resourceFactory in resourceFactories) {
if (resourceFactory.Accept(uri))
return resourceFactory.Create(uri);
}
throw new KernelException("No Resource factory was able to deal with Uri " + ((object)uri)?.ToString());
}
public IResource CreateResource(CustomUri uri, string basePath)
{
if (uri == null)
throw new ArgumentNullException("uri");
if (basePath == null)
throw new ArgumentNullException("basePath");
foreach (IResourceFactory resourceFactory in resourceFactories) {
if (resourceFactory.Accept(uri))
return resourceFactory.Create(uri, basePath);
}
throw new KernelException("No Resource factory was able to deal with Uri " + ((object)uri)?.ToString());
}
public void RegisterResourceFactory(IResourceFactory resourceFactory)
{
if (resourceFactory == null)
throw new ArgumentNullException("resourceFactory");
resourceFactories.Add(resourceFactory);
}
protected virtual void InitDefaultResourceFactories()
{
RegisterResourceFactory(new AssemblyResourceFactory());
RegisterResourceFactory(new UncResourceFactory());
RegisterResourceFactory(new FileResourceFactory());
}
}
}