IInstanceProvider Antarmuka
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menyatakan metode yang menyediakan objek layanan atau mendaur ulang objek layanan untuk layanan Windows Communication Foundation (WCF).
public interface class IInstanceProvider
public interface IInstanceProvider
type IInstanceProvider = interface
Public Interface IInstanceProvider
Contoh
Contoh kode berikut menunjukkan cara menerapkan IInstanceProvider yang menyediakan perilaku "singleton"; selalu mengembalikan instans layanan yang sama dan tidak mendaur ulangnya.
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
Contoh kode berikut menunjukkan cara menerapkan atribut kustom yang diterapkan untuk menyisipkan penyedia instans IContractBehavior layanan kustom. Ini juga mengimplementasikan IContractBehaviorAttribute, yang mengikat penggunaannya ke kontrak tertentu.
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
Keterangan
Terapkan IInstanceProvider antarmuka untuk mengontrol pembuatan dan daur ulang objek layanan ketika seseorang diminta atau dibuang oleh InstanceContext objek.
IInstanceProvider Setelah antarmuka diimplementasikan, Anda harus menetapkan objek penyedia instans kustom Anda ke InstanceProvider properti menggunakan perilaku titik akhir (IEndpointBehaviorobjek) atau perilaku kontrak (IContractBehaviorobjek).
Jika mekanisme penyisipan adalah perilaku titik akhir, Anda juga dapat menerapkan BehaviorExtensionElement objek yang dapat menyisipkan perilaku kustom Anda menggunakan file konfigurasi. Jika mekanisme penyisipan adalah perilaku kontrak, Anda dapat menyisipkan perilaku secara terprogram sebelum pembukaan host layanan atau Anda dapat menerapkan atribut kustom. (Untuk contoh pendekatan perilaku kontrak, lihat bagian Contoh.)
IInstanceProvider memiliki dua metode, GetInstance dan ReleaseInstance. Metode ini biasanya diimplementasikan untuk membuat objek layanan menggunakan konstruktor tanpa parameter atau untuk menginisialisasi atau membuang beberapa status yang terkait dengan masa pakai objek. Pengumpulan objek layanan adalah salah satu contoh fungsionalitas kustom IInstanceProvider .
Biasanya, InstanceContext memanggil GetInstance kapan InstanceContext pertama kali dibuat dan memanggil ReleaseInstance metode ketika InstanceContext ditutup.
Ada dua cara untuk menyebabkan InstanceContext objek merilis objek layanan sebelum InstanceContext ditutup. Metode pertama adalah mengatur ke ReleaseInstanceModeAfterCall atau BeforeAndAfterCall. Metode kedua adalah memanggil ReleaseServiceInstance metode . Jika ini dilakukan, InstanceContext memanggil ReleaseInstance metode pada penyedia instans dispatcher. Jika pesan baru tiba setelah instans dirilis, WCF membuat instans baru menggunakan metode .GetInstance
Nota
InstanceContextMode Jika layanan adalah Single, sistem tidak memanggil GetInstance metode atau ReleaseInstance bahkan ketika pengguna tidak menyediakan objek layanan terkenal kecuali pengguna langsung memanggil ReleaseServiceInstance dan kemudian memanggil GetServiceInstance.
Metode
| Nama | Deskripsi |
|---|---|
| GetInstance(InstanceContext, Message) |
Mengembalikan objek layanan yang diberikan objek yang ditentukan InstanceContext . |
| GetInstance(InstanceContext) |
Mengembalikan objek layanan yang diberikan objek yang ditentukan InstanceContext . |
| ReleaseInstance(InstanceContext, Object) |
Dipanggil saat InstanceContext objek mendaur ulang objek layanan. |