internal object CreateInstance(ServiceChannel channel) { Type type; //try //{ type = Builder.GetInstanceType(channel.Provider.Instance, channel.Provider.Contract); //} //catch //{ // return null; //} InstanceProxy proxy = new InstanceProxy(channel, channel.Provider.ServerOperations.ToList(), InvokeMethod); if (Unity.IsRegistered(type)) { return(Unity.GetInstance(type)); } foreach (var constructor in type.GetConstructors()) { var parameters = constructor.GetParameters(); object[] parameterArray = new object[parameters.Length]; bool parameterSuccess = true; parameterArray[0] = proxy; for (int i = 1; i < parameters.Length; i++) { object obj = Unity.GetInstance(parameters[i].ParameterType); if (obj == null) { parameterSuccess = false; break; } parameterArray[i] = obj; } if (!parameterSuccess) { continue; } try { return(Activator.CreateInstance(type, parameterArray)); } catch { } } return(null); }
private object CreateInstance(ServiceChannel channel, InvokeMethodDelegate invokeMethod, Type type) { InstanceProxy proxy = new InstanceProxy(channel, channel.Provider.ClientOperations.ToList(), invokeMethod); if (Unity.IsRegistered(type)) { return(Unity.GetInstance(type)); } foreach (var constructor in type.GetConstructors()) { var parameters = constructor.GetParameters(); object[] parameterArray = new object[parameters.Length]; bool parameterSuccess = true; parameterArray[0] = proxy; for (int i = 1; i < parameters.Length; i++) { object obj = Unity.GetInstance(parameters[i].ParameterType); if (obj == null) { parameterSuccess = false; break; } parameterArray[i] = obj; } if (!parameterSuccess) { continue; } try { return(Activator.CreateInstance(type, parameterArray)); } catch { } } return(null); }