private void TestDIContainer_NewTypeRegistered(object sender, EventArgs e) { TestDIContainer.NewTypeRegistered -= TestDIContainer_NewTypeRegistered; if (TestDIContainer.HasRealImplementation(interfaceType)) { realImplementation = TestDIContainer.GetInstance(interfaceType); foreach (var invocation in queue) { if (invocation.Item1 == ActionType.Invoke) { var mi = TypeHelper.GetMethodInfo(realImplementation.GetType(), invocation.Item3, (object[])invocation.Item4); mi.Invoke(realImplementation, (object[])invocation.Item4); } else if (invocation.Item1 == ActionType.Set) { var pi = TypeHelper.GetPropertyInfo(realImplementation.GetType(), null, invocation.Item3); pi.SetValue(realImplementation, invocation.Item4); } else if (invocation.Item1 == ActionType.Event) { var ei = TypeHelper.GetEventInfo(realImplementation.GetType(), invocation.Item3); ei.AddEventHandler(realImplementation, (Delegate)invocation.Item4); } } } }
private static void QueueDynamicProxyTest() { Console.WriteLine("-------QueueDynamicProxyTest start-------"); ILogin login = (ILogin)TestDIContainer.GetInstance(typeof(ILogin)); login.LoginName = "test"; login.Password = "******"; login.TryLogin += login_TryLogin; login.DoLogin(); Console.WriteLine("Press any key to register real implementation!"); Console.ReadLine(); TestDIContainer.RegisterFunc(typeof(ILogin), () => { return(new Login()); }); Console.WriteLine("-------QueueDynamicProxyTest end-------"); Console.ReadLine(); }
public QueueDynamicProxy(Type interfaceType) { this.interfaceType = interfaceType; if (TestDIContainer.HasRealImplementation(interfaceType)) { if (realImplementation == null) { realImplementation = TestDIContainer.GetInstance(interfaceType); } } else { TestDIContainer.NewTypeRegistered += TestDIContainer_NewTypeRegistered; } }