using System.Collections.Generic;
namespace ScriptNET.Runtime
{
///
/// Base implementation of IScopeFactory interface. Creates instances of defined scope types
///
public class ScopeFactory : IScopeFactory
{
private Dictionary scopeTypes = new Dictionary();
public ScopeFactory()
{
}
public void RegisterType(int id, IScopeActivator instance)
{
if (scopeTypes.ContainsKey(id))
{
scopeTypes[id] = instance;
}
else
{
scopeTypes.Add(id, instance);
}
}
public void RegisterType(ScopeTypes id, IScopeActivator instance)
{
RegisterType((int)id, instance);
}
public IScriptScope Create()
{
return Create((int)ScopeTypes.Default);
}
public IScriptScope Create(ScopeTypes id)
{
return Create((int)id);
}
public IScriptScope Create(ScopeTypes id, params object[] args)
{
return Create((int)id, args);
}
public IScriptScope Create(int id, params object[] args)
{
return Create((int)id, null, args);
}
public IScriptScope Create(ScopeTypes id, IScriptScope parent)
{
return Create((int)id, parent);
}
public IScriptScope Create(ScopeTypes id, IScriptScope parent, params object[] args)
{
return Create((int)id, parent, args);
}
public IScriptScope Create(int id, IScriptScope parent, params object[] args)
{
return scopeTypes[id].Create(parent, args);
}
}
}