IInstanceProvider.GetInstance IInstanceProvider.GetInstance IInstanceProvider.GetInstance Method

Definition

Returns a service object.

Overloads

GetInstance(InstanceContext) GetInstance(InstanceContext) GetInstance(InstanceContext)

Returns a service object given the specified InstanceContext object.

GetInstance(InstanceContext, Message) GetInstance(InstanceContext, Message) GetInstance(InstanceContext, Message)

Returns a service object given the specified InstanceContext object.

GetInstance(InstanceContext) GetInstance(InstanceContext) GetInstance(InstanceContext)

Returns a service object given the specified InstanceContext object.

public:
 System::Object ^ GetInstance(System::ServiceModel::InstanceContext ^ instanceContext);
public object GetInstance (System.ServiceModel.InstanceContext instanceContext);
abstract member GetInstance : System.ServiceModel.InstanceContext -> obj

Parameters

instanceContext
InstanceContext InstanceContext InstanceContext

The current InstanceContext object.

Returns

A user-defined service object.

Examples

The following code example shows how to implement IInstanceProvider that provides "singleton" behavior; it always returns the same service instance and does not recycle it.

public class ObjectProviderBehavior : IInstanceProvider
{

  string message;
  SampleService service = null;

  public ObjectProviderBehavior(string msg)
  {
    Console.WriteLine("The non-default constructor has been called.");
    this.message = msg;
    this.service = new SampleService("Singleton sample service.");
  }

  #region IInstanceProvider Members

  public object GetInstance(InstanceContext instanceContext, System.ServiceModel.Channels.Message message)
  {
    Console.WriteLine("GetInstance is called:");
    return this.service;
  }

  public object GetInstance(InstanceContext instanceContext)
  {
    Console.WriteLine("GetInstance is called:");
    return this.service;
  }

  public void ReleaseInstance(InstanceContext instanceContext, object instance)
  {
    Console.WriteLine("ReleaseInstance is called. The SingletonBehaviorAttribute never releases.");
  }

  #endregion
}
 Public Class ObjectProviderBehavior
  Implements IInstanceProvider

Private message As String
Private service As SampleService = Nothing

Public Sub New(ByVal msg As String)
  Console.WriteLine("The non-default constructor has been called.")
  Me.message = msg
  Me.service = New SampleService("Singleton sample service.")
End Sub

#Region "IInstanceProvider Members"

Public Function GetInstance(ByVal instanceContext As InstanceContext, ByVal message As System.ServiceModel.Channels.Message) As Object Implements IInstanceProvider.GetInstance
  Console.WriteLine("GetInstance is called:")
  Return Me.service
End Function

Public Function GetInstance(ByVal instanceContext As InstanceContext) As Object Implements IInstanceProvider.GetInstance
  Console.WriteLine("GetInstance is called:")
  Return Me.service
End Function

Public Sub ReleaseInstance(ByVal instanceContext As InstanceContext, ByVal instance As Object) Implements IInstanceProvider.ReleaseInstance
  Console.WriteLine("ReleaseInstance is called. The SingletonBehaviorAttribute never releases.")
End Sub

#End Region
 End Class

The following code example shows how to implement a custom attribute that implements IContractBehavior to insert the custom service instance provider. It also implements IContractBehaviorAttribute, which binds its use to a specific contract.

public class SingletonBehaviorAttribute : Attribute, IContractBehaviorAttribute, IContractBehavior
{

  #region IContractBehaviorAttribute Members

  public Type TargetContract
  {
    get { return typeof(ISampleService); }
  }

  #endregion

  #region IContractBehavior Members

  public void AddBindingParameters(ContractDescription description, ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection parameters)
  {
    return;
  }

  public void ApplyClientBehavior(ContractDescription description, ServiceEndpoint endpoint, ClientRuntime clientRuntime)
  {
    return;
  }

  public void ApplyDispatchBehavior(ContractDescription description, ServiceEndpoint endpoint, DispatchRuntime dispatch)
  {
    dispatch.InstanceProvider = new ObjectProviderBehavior("Custom ObjectProviderBehavior constructor.");
  }

  public void Validate(ContractDescription description, ServiceEndpoint endpoint)
  {
    return;
  }

  #endregion
}
 Public Class SingletonBehaviorAttribute
  Inherits Attribute
  Implements IContractBehaviorAttribute, IContractBehavior

#Region "IContractBehaviorAttribute Members"

Public ReadOnly Property TargetContract() As Type Implements IContractBehaviorAttribute.TargetContract
  Get
	  Return GetType(ISampleService)
  End Get
End Property

#End Region

#Region "IContractBehavior Members"

Public Sub AddBindingParameters(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint, ByVal parameters As System.ServiceModel.Channels.BindingParameterCollection) Implements IContractBehavior.AddBindingParameters
  Return
End Sub

Public Sub ApplyClientBehavior(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint, ByVal clientRuntime As ClientRuntime) Implements IContractBehavior.ApplyClientBehavior
  Return
End Sub

Public Sub ApplyDispatchBehavior(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint, ByVal dispatch As DispatchRuntime) Implements IContractBehavior.ApplyDispatchBehavior
  dispatch.InstanceProvider = New ObjectProviderBehavior("Custom ObjectProviderBehavior constructor.")
End Sub

Public Sub Validate(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint) Implements IContractBehavior.Validate
  Return
End Sub

#End Region
 End Class

Remarks

Use the GetInstance(InstanceContext) method to control the exact service object that a WCF service receives when it attempts to create a new one.

GetInstance(InstanceContext, Message) GetInstance(InstanceContext, Message) GetInstance(InstanceContext, Message)

Returns a service object given the specified InstanceContext object.

public:
 System::Object ^ GetInstance(System::ServiceModel::InstanceContext ^ instanceContext, System::ServiceModel::Channels::Message ^ message);
public object GetInstance (System.ServiceModel.InstanceContext instanceContext, System.ServiceModel.Channels.Message message);
abstract member GetInstance : System.ServiceModel.InstanceContext * System.ServiceModel.Channels.Message -> obj

Parameters

instanceContext
InstanceContext InstanceContext InstanceContext

The current InstanceContext object.

message
Message Message Message

The message that triggered the creation of a service object.

Returns

The service object.

Examples

The following code example shows how to implement IInstanceProvider that provides "singleton" behavior; it always returns the same service instance and does not recycle it.

public class ObjectProviderBehavior : IInstanceProvider
{

  string message;
  SampleService service = null;

  public ObjectProviderBehavior(string msg)
  {
    Console.WriteLine("The non-default constructor has been called.");
    this.message = msg;
    this.service = new SampleService("Singleton sample service.");
  }

  #region IInstanceProvider Members

  public object GetInstance(InstanceContext instanceContext, System.ServiceModel.Channels.Message message)
  {
    Console.WriteLine("GetInstance is called:");
    return this.service;
  }

  public object GetInstance(InstanceContext instanceContext)
  {
    Console.WriteLine("GetInstance is called:");
    return this.service;
  }

  public void ReleaseInstance(InstanceContext instanceContext, object instance)
  {
    Console.WriteLine("ReleaseInstance is called. The SingletonBehaviorAttribute never releases.");
  }

  #endregion
}
 Public Class ObjectProviderBehavior
  Implements IInstanceProvider

Private message As String
Private service As SampleService = Nothing

Public Sub New(ByVal msg As String)
  Console.WriteLine("The non-default constructor has been called.")
  Me.message = msg
  Me.service = New SampleService("Singleton sample service.")
End Sub

#Region "IInstanceProvider Members"

Public Function GetInstance(ByVal instanceContext As InstanceContext, ByVal message As System.ServiceModel.Channels.Message) As Object Implements IInstanceProvider.GetInstance
  Console.WriteLine("GetInstance is called:")
  Return Me.service
End Function

Public Function GetInstance(ByVal instanceContext As InstanceContext) As Object Implements IInstanceProvider.GetInstance
  Console.WriteLine("GetInstance is called:")
  Return Me.service
End Function

Public Sub ReleaseInstance(ByVal instanceContext As InstanceContext, ByVal instance As Object) Implements IInstanceProvider.ReleaseInstance
  Console.WriteLine("ReleaseInstance is called. The SingletonBehaviorAttribute never releases.")
End Sub

#End Region
 End Class

The following code example shows how to implement a custom attribute that implements IContractBehavior to insert the custom service instance provider. It also implements IContractBehaviorAttribute, which binds its use to a specific contract.

public class SingletonBehaviorAttribute : Attribute, IContractBehaviorAttribute, IContractBehavior
{

  #region IContractBehaviorAttribute Members

  public Type TargetContract
  {
    get { return typeof(ISampleService); }
  }

  #endregion

  #region IContractBehavior Members

  public void AddBindingParameters(ContractDescription description, ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection parameters)
  {
    return;
  }

  public void ApplyClientBehavior(ContractDescription description, ServiceEndpoint endpoint, ClientRuntime clientRuntime)
  {
    return;
  }

  public void ApplyDispatchBehavior(ContractDescription description, ServiceEndpoint endpoint, DispatchRuntime dispatch)
  {
    dispatch.InstanceProvider = new ObjectProviderBehavior("Custom ObjectProviderBehavior constructor.");
  }

  public void Validate(ContractDescription description, ServiceEndpoint endpoint)
  {
    return;
  }

  #endregion
}
 Public Class SingletonBehaviorAttribute
  Inherits Attribute
  Implements IContractBehaviorAttribute, IContractBehavior

#Region "IContractBehaviorAttribute Members"

Public ReadOnly Property TargetContract() As Type Implements IContractBehaviorAttribute.TargetContract
  Get
	  Return GetType(ISampleService)
  End Get
End Property

#End Region

#Region "IContractBehavior Members"

Public Sub AddBindingParameters(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint, ByVal parameters As System.ServiceModel.Channels.BindingParameterCollection) Implements IContractBehavior.AddBindingParameters
  Return
End Sub

Public Sub ApplyClientBehavior(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint, ByVal clientRuntime As ClientRuntime) Implements IContractBehavior.ApplyClientBehavior
  Return
End Sub

Public Sub ApplyDispatchBehavior(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint, ByVal dispatch As DispatchRuntime) Implements IContractBehavior.ApplyDispatchBehavior
  dispatch.InstanceProvider = New ObjectProviderBehavior("Custom ObjectProviderBehavior constructor.")
End Sub

Public Sub Validate(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint) Implements IContractBehavior.Validate
  Return
End Sub

#End Region
 End Class

Remarks

Use the GetInstance(InstanceContext, Message) method to control the exact service object that a WCF service receives when it attempts to create a new one.

Applies to