aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Services/Base
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Services/Base')
-rw-r--r--OpenSim/Services/Base/ServiceBase.cs29
1 files changed, 26 insertions, 3 deletions
diff --git a/OpenSim/Services/Base/ServiceBase.cs b/OpenSim/Services/Base/ServiceBase.cs
index 800b172..c8a924b 100644
--- a/OpenSim/Services/Base/ServiceBase.cs
+++ b/OpenSim/Services/Base/ServiceBase.cs
@@ -36,6 +36,25 @@ namespace OpenSim.Services.Base
36 { 36 {
37 public T LoadPlugin<T>(string dllName) where T:class 37 public T LoadPlugin<T>(string dllName) where T:class
38 { 38 {
39 return LoadPlugin<T>(dllName, new Object[0]);
40 }
41
42 public T LoadPlugin<T>(string dllName, Object[] args) where T:class
43 {
44 string[] parts = dllName.Split(new char[] {':'});
45
46 dllName = parts[0];
47
48 string className = String.Empty;
49
50 if (parts.Length > 1)
51 className = parts[1];
52
53 return LoadPlugin<T>(dllName, className, args);
54 }
55
56 public T LoadPlugin<T>(string dllName, string className, Object[] args) where T:class
57 {
39 string interfaceName = typeof(T).ToString(); 58 string interfaceName = typeof(T).ToString();
40 59
41 try 60 try
@@ -46,13 +65,17 @@ namespace OpenSim.Services.Base
46 { 65 {
47 if (pluginType.IsPublic) 66 if (pluginType.IsPublic)
48 { 67 {
68 if (className != String.Empty &&
69 pluginType.ToString() !=
70 pluginType.Namespace + "." + className)
71 continue;
72
49 Type typeInterface = 73 Type typeInterface =
50 pluginType.GetInterface(interfaceName, true); 74 pluginType.GetInterface(interfaceName, true);
51 if (typeInterface != null) 75 if (typeInterface != null)
52 { 76 {
53 T plug = (T)Activator.CreateInstance( 77 T plug = (T)Activator.CreateInstance(pluginType,
54 pluginAssembly.GetType( 78 args);
55 pluginType.ToString()));
56 79
57 return plug; 80 return plug;
58 } 81 }