static void Main(string[] args) { DemoClass demo = new DemoClass(); IDemoClass demoInterface = demo; Console.WriteLine("Hello World!"); }
private static IDemoClass GetSingleCallObject() { string url = "tcp://127.0.0.1:8501/SimpleRemote/ServerSingleCall"; IDemoClass obj = (IDemoClass)Activator.GetObject(typeof(IDemoClass), url); return(obj); }
public Form1() { InitializeComponent(); //ClientActivated(); //ServerSingleton(); //ServerSingleCall(); //RunTest("CAO1"); //RunTest("CAO2"); IDemoClass obj1 = GetSingleCallObject(); obj1.ShowAppDomain(); obj1.ShowCount("wk1"); obj1.ShowCount("wk1"); IDemoClass obj2 = GetSingletonObject(); obj1.ShowAppDomain(); obj1.ShowCount("wk2"); obj1.ShowCount("wk2"); }
static void Main(string[] args) { //1.确立通道传送方式 TcpClientChannel clientChannel = new TcpClientChannel(); ChannelServices.RegisterChannel(clientChannel, false); //因为客户端仅引用了IDemoClass,所以无法通过new 对象的方式创建远程对象。 //所以无法使用客户端注册远程对象(RemotingConfiguration.RegisterWellKnownClientType)。 //故而只能采用Activator.GetObject()方式来创建远程对象 //IDemoClass demo =(IDemoClass)Activator.GetObject(typeof(IDemoClass), "tcp://127.0.0.1:8501/RemovedDemo/ServerActivated"); //demo.ShowAppDomain(); //demo.ShowCount("Zhang"); IServerFactory serverFactory = (IServerFactory)Activator.GetObject(typeof(IServerFactory), "tcp://127.0.0.1:8501/RemovedDemo/ServerFactotyActivated"); IDemoClass demo = serverFactory.GetDemoClass(); demo.ShowAppDomain(); demo.ShowCount("Zhang"); Console.ReadLine(); }
/// <summary> /// Run the demo. /// </summary> public static void Run() { // define a trace source logger with file listener. string logFilePath = Path.Combine(AppContext.BaseDirectory, "UnityDemo.log"); Stream logStream = File.Create(logFilePath); TextWriterTraceListener traceListener = new TextWriterTraceListener(logStream); SourceSwitch verboseSwitch = new SourceSwitch("VerboseSwitch", "Verbose"); ILoggerFactory loggerFactory = new LoggerFactory().AddTraceSource(verboseSwitch, traceListener); // define a local logger instance. ILogger logger = loggerFactory.CreateLogger <UnityDemo>(); // create unity container instance. UnityContainer container = new UnityContainer(); logger.LogDebug("Unity Container created."); // add logging extension to the unity container. container.AddExtension(new LoggingExtension(loggerFactory)); logger.LogDebug("Logging extension added."); // load unity config file ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap { ExeConfigFilename = "UnityDemo.unity.config" }; Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration( fileMap, ConfigurationUserLevel.None); UnityConfigurationSection unitySection = (UnityConfigurationSection)configuration.GetSection("unity"); // load design-time configuration to the unity container. container.LoadConfiguration(unitySection); logger.LogDebug("Design-time configuration loaded."); // add runtime registration to the unity container. container.RegisterType <IDemoClass, DemoClass>( "runtime_register", new InjectionConstructor( new ResolvedParameter(typeof(ILogger <DemoClass>), "logger"), new ResolvedParameter(typeof(string), "name"), new ResolvedParameter(typeof(string), "value"))); logger.LogDebug("Runtime type mapping registered."); // define parameter overrides for design time resolving. ParameterOverride designTimeNameOverride = new ParameterOverride("name", "design_time_demo_1"); ParameterOverride designTimeValueOverride = new ParameterOverride("value", "demo_value_1"); // resolve demo class instance from design time registration with parameter overrides. IDemoClass designTimeDemoClass = container.Resolve <IDemoClass>( "design_time_register", designTimeNameOverride, designTimeValueOverride); Console.WriteLine($"Resolved design time demo class: {designTimeDemoClass}"); designTimeDemoClass.DemoMethod(); // define parameter overrides for runtime time resolving. ParameterOverride runtimeNameOverride = new ParameterOverride("name", "runtime_demo_2"); ParameterOverride runtimeValueOverride = new ParameterOverride("value", "demo_value_2"); // resolve demo class instance from runtime registration with parameter overrides. IDemoClass runtimeDemoClass = container.Resolve <IDemoClass>( "runtime_register", runtimeNameOverride, runtimeValueOverride); Console.WriteLine($"Resolved runtime demo class: {runtimeDemoClass}"); runtimeDemoClass.DemoMethod(); // release the log file handler. loggerFactory.Dispose(); // print unity config file Console.WriteLine(); string configFilePath = Path.Combine(AppContext.BaseDirectory, fileMap.ExeConfigFilename); Console.WriteLine($"[Trace] unity config file: {configFilePath}"); Console.WriteLine(File.ReadAllText(configFilePath, Encoding.UTF8)); // print log file Console.WriteLine(); Console.WriteLine($"[Trace] log file: {logFilePath}"); Console.WriteLine(File.ReadAllText(logFilePath, Encoding.UTF8)); }