static void Main(string[] args) { IUnityContainer container = new UnityContainer(); container.RegisterTypes( AllClasses.FromLoadedAssemblies().Where(x => x.Namespace.Contains("UnityAutoRegistration")), WithMappings.FromAllInterfaces, WithName.Default, WithLifetime.ContainerControlled); IMyMessage message = container.Resolve <IMyMessage>(); message.Write("Vulcan"); Console.WriteLine(); foreach (var item in container.Registrations) { if (item.MappedToType.Name == item.RegisteredType.Name) { continue; } Console.WriteLine($"Name : {item.Name}"); Console.WriteLine($"RegisteredType : {item.RegisteredType.Name}"); Console.WriteLine($"MappedToType : {item.MappedToType.Name}"); Console.WriteLine($"LifetimeManager : {item.LifetimeManager.LifetimeType.Name}"); Console.WriteLine(); } Console.WriteLine("Press any key for continuing..."); Console.ReadKey(); }
public void Send(IMyMessage message) { foreach (var listener in _list) { listener.HandleMessage(message); } }
public void HandleMessage(IMyMessage message) { if (!(message is T)) { throw new InvalidOperationException(); } HandleMessage((T)message); }
private async static void DuplexSample() { WSDualHttpBinding binding = new WSDualHttpBinding(); var address = new EndpointAddress("http://localhost:8733/Design_Time_Addresses/MessageService/MessageService/"); var context = new InstanceContext(new ClientCallBack()); var factory = new DuplexChannelFactory <IMyMessage>(context, binding, address); IMyMessage message = factory.CreateChannel(); await Task.Run(() => { message.MessageToServer("from the server"); }); }
private static async void DuplexSample() { var binding = new WSDualHttpBinding(); var address = new EndpointAddress("http://localhost:8733/Design_Time_Addresses/MessageService/Service1/"); var clientCallback = new ClientCallback(); var context = new InstanceContext(clientCallback); var factory = new DuplexChannelFactory <IMyMessage>(context, binding, address); IMyMessage messageChannel = factory.CreateChannel(); await Task.Run(() => messageChannel.MessageToServer("From the server")); }
static void Main() { Console.WriteLine("Client - wait for service"); Console.ReadLine(); var binding = new WSDualHttpBinding(); var address = new EndpointAddress("http://localhost:8732/Design_Time_Addresses/MessageService/Service1/"); var clientCallback = new ClientCallback(); var context = new InstanceContext(clientCallback); var factory = new DuplexChannelFactory <IMyMessage>(context, binding, address); IMyMessage messageChannel = factory.CreateChannel(); messageChannel.MessageToServer("From the client"); Console.WriteLine("Client - press return to exit"); Console.ReadLine(); }
static void Main(string[] args) { // 自動掃描所指定的組件內容,根據不同引數設定,自動掃描組件內的所有型別, // 進而判斷與加入抽象介面型別與具體實作類別的對應關係,並且使用預設的注入物件生命週期 IUnityContainer container = new UnityContainer(); container.RegisterTypes( AllClasses.FromLoadedAssemblies().Where(x => x.Namespace.Contains("UnityAutoRegistration")), WithMappings.FromAllInterfaces, WithName.Default, WithLifetime.ContainerControlled); // 進行抽象型別的具體實作物件的解析 IMyMessage message = container.Resolve <IMyMessage>(); // 執行取得物件的方法 message.Write("Vulcan"); Console.WriteLine(); Console.WriteLine("顯示 IoC 容器中的所有型別對應"); // 使用 IUnityContainer.Registrations 屬性值, // 來查看究竟有那些抽象型別與具體實作類別對應關係,加入到 DI Container 內呢? foreach (var item in container.Registrations) { if (item.MappedToType.Name == item.RegisteredType.Name) { continue; } Console.WriteLine($"Name : {item.Name}"); Console.WriteLine($"RegisteredType : {item.RegisteredType.Name}"); Console.WriteLine($"MappedToType : {item.MappedToType.Name}"); Console.WriteLine($"LifetimeManager : {item.LifetimeManager.LifetimeType.Name}"); Console.WriteLine(); } Console.WriteLine("Press any key for continuing..."); Console.ReadKey(); }
private static void Send(IMyMessage x, BaseEventData y) { x.Message1(); Debug.Log("From Sender"); }
public void AddMessage(IMyMessage message) { this.messages.Add(message); }
public static void Build(IMyMessage message) /* ... */ }
void IMyMessageReceiver.HandleMessage(IMyMessage message) { HandleMessage(message as T); }