* Implements Extensions to MRM. This allows Region Modules to insert new classes into OpenSim MRM's.

* Example in region module:
    Scene.GetModuleInterface<IMRMModule>.RegisterExtension<IMyInterface>(this);
* In the MRM:
    //@DEPENDS:MyExtensionModule.dll
    ...
    Host.Extensions<IMyInterface>.DoStuff();
This commit is contained in:
Adam Frisby
2009-04-21 04:55:53 +00:00
parent 01a22d940f
commit 594c7c3eb1
6 changed files with 81 additions and 3 deletions

View File

@@ -0,0 +1,39 @@
using System;
using System.Collections.Generic;
using System.Text;
using OpenSim.Region.OptionalModules.Scripting.Minimodule.Interfaces;
namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
{
class ExtensionHandler : IExtension
{
private readonly Dictionary<Type, object> m_instances;
public ExtensionHandler(Dictionary<Type, object> instances)
{
m_instances = instances;
}
public T Get<T>()
{
return (T) m_instances[typeof (T)];
}
public bool TryGet<T>(out T extension)
{
if (!m_instances.ContainsKey(typeof(T)))
{
extension = default(T);
return false;
}
extension = Get<T>();
return true;
}
public bool Has<T>()
{
return m_instances.ContainsKey(typeof (T));
}
}
}