InstanceBehavior.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ServiceModel;
  4. using System.ServiceModel.Dispatcher;
  5. using System.ServiceModel.Channels;
  6. using System.Text;
  7. namespace System.ServiceModel.Dispatcher
  8. {
  9. internal class InstanceBehavior
  10. {
  11. DispatchRuntime dispatch_runtime;
  12. internal InstanceBehavior (DispatchRuntime runtime) {
  13. dispatch_runtime = runtime;
  14. }
  15. internal void Initialize (InstanceContext iCtx) {
  16. Message message = OperationContext.Current.IncomingMessage;
  17. IContextChannel channel = OperationContext.Current.Channel;
  18. if (dispatch_runtime.InstanceContextProvider != null) {
  19. dispatch_runtime.InstanceContextProvider.InitializeInstanceContext (iCtx,
  20. message,
  21. channel);
  22. }
  23. foreach (IInstanceContextInitializer init in dispatch_runtime.InstanceContextInitializers)
  24. init.Initialize (iCtx, message);
  25. }
  26. internal object GetServiceInstance (InstanceContext ctx, Message m, ref bool createdByUserProvider) {
  27. if (dispatch_runtime.InstanceProvider != null) {
  28. createdByUserProvider = true;
  29. return dispatch_runtime.InstanceProvider.GetInstance (ctx, m);
  30. }
  31. createdByUserProvider = false;
  32. return Activator.CreateInstance (
  33. dispatch_runtime.ChannelDispatcher.Host.Description.ServiceType);
  34. }
  35. internal IInstanceContextProvider InstanceContextProvider {
  36. get {
  37. return dispatch_runtime.InstanceContextProvider;
  38. }
  39. }
  40. internal void ReleaseServiceInstance (InstanceContext ctx, object impl)
  41. {
  42. if (ctx.IsUserProvidedInstance) {
  43. dispatch_runtime.InstanceProvider.ReleaseInstance (ctx, impl);
  44. }
  45. }
  46. }
  47. }