📄 myclass.cs
字号:
using System;using System.Reflection;using System.Collections;using System.Collections.Specialized;using System.Configuration;using System.IO;using System.Threading;using DbgMgr;namespace UserReference { /*** There are multiple ways of defining classes in a common assembly shared by multiple other assemblies and applications // Used when wanting to abstract intention from implementation public interface xxx { } // Used when wanting to implement some default functionality that is shared // in multiple places abstract class xxx { } // Used when wanting to share a class in multiple places that includes // some functionality. The class is sealed so that others cannot derive // from it reducing the number of dependencies sealed class xxx { } ***/ public interface IUser { string name { get; set;} string street { get; set;} string city { get; set;} string country { get; set;} } public interface IOperations { IUser LoadUser( string reference); } public interface IImplementations { Object GetResource( string prefix, string resource, string view); } public class Reference { private static Reference _instance; private string _path; private string[] _pluginEntries; private ArrayList _assemblies = new ArrayList(); public string PluginPath { get { return _path; } } // Constructor is made private so that only // the class can instantiate itself private Reference() { DebugMgr.start( 9, "Reference.Reference"); NameValueCollection pluginConfig = (NameValueCollection) ConfigurationSettings.GetConfig("settings/plugin"); if (pluginConfig["dir"] == null) { throw(new ConfigurationException("Incorrect Plugin Directory")); } else { _path = pluginConfig[ "dir"]; DebugMgr.outputVar( 9, "Plugin directory", _path); _pluginEntries = Directory.GetFileSystemEntries( _path, "*.dll"); OperatingSystem os = System.Environment.OSVersion; DebugMgr.outputVar( 9, "Operating System", os.Platform); foreach( string path in _pluginEntries) { DebugMgr.outputVar( 9, "assembly", path); Assembly assembly; if ( (int)os.Platform == 128) { // This is Linux assembly = Assembly.LoadFrom( path); } else { // This is everything else assembly = Assembly.Load( AssemblyName.GetAssemblyName( path)); } _assemblies.Add( assembly); } } DebugMgr.end( 9); } public static Reference Instance() { Monitor.Enter( typeof(Reference)); if ( _instance == null) { _instance = new Reference(); } Monitor.Exit( typeof(Reference)); return _instance; } public Object GetObject( string @class) { Object retval = null; DebugMgr.start( 9, "Reference.GetObject"); DebugMgr.outputVar( 9, "Class to instantiate", @class); foreach( Assembly assembly in _assemblies) { Object @object; @object = assembly.CreateInstance( @class); if ( @object != null) { DebugMgr.outputVar( 9, "loaded object", @class); retval = @object; break; } } DebugMgr.end( 9); return retval; } public Object GetUnknownTypeObject( string prefix, string resource, string view) { Object retval = null; DebugMgr.start( 9, "Reference.GetUnknownTypeObject"); foreach( Assembly assembly in _assemblies) { Object @object; IImplementations implementations = (IImplementations)assembly.CreateInstance( "Reference.Implementation"); if ( implementations != null) { @object = implementations.GetResource( prefix, resource, view); if ( @object != null) { DebugMgr.output( 9, "Found Object"); retval = @object; break; } } else { DebugMgr.outputVar( 9, "Did not implement", assembly.FullName); } } DebugMgr.end( 9); return retval; } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -