پیاده سازی InstanceProvider برای سرویس های WCF
نویسنده: مسعود پاکدل
تاریخ: ۱۳۹۲/۱۱/۱۰ ۲۰:۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
[ServiceBehavior( IncludeExceptionDetailInFaults = true)]
public class BookService : IBookService
{
public BookService(IBookRepository bookRepository)
{
Repository = bookRepository;
}
public IBookRepository Repository
{
get;
private set;
}
public IList<Entity.Book> GetAll()
{
return Repository.GetAll();
}
} var container = new UnityContainer();
container.RegisterType<IBookRepository, BookRepository>();
container.RegisterType<BookService, BookService>();
ServiceLocator.SetLocatorProvider(new ServiceLocatorProvider(() => { return container; })); public class UnityInstanceProvinder : IInstanceProvider
{
private Type serviceType;
public UnityInstanceProvinder( Type serviceType )
{
this.serviceType = serviceType;
}
public object GetInstance( InstanceContext instanceContext, Message message )
{
return ServiceLocator.Current.GetInstance( serviceType );
}
public object GetInstance( InstanceContext instanceContext )
{
return GetInstance( instanceContext, null );
}
public void ReleaseInstance( InstanceContext instanceContext, object instance )
{
if ( instance is IDisposable )
{
( ( IDisposable )instance ).Dispose();
}
}
} public class UnityInstanceProviderContext : IServiceBehavior
{
public void AddBindingParameters( ServiceDescription serviceDescription , ServiceHostBase serviceHostBase , Collection<ServiceEndpoint> endpoints , BindingParameterCollection bindingParameters )
{
}
public void ApplyDispatchBehavior( ServiceDescription serviceDescription , ServiceHostBase serviceHostBase )
{
serviceHostBase.ChannelDispatchers.ToList().ForEach( channelDispatcherBase =>
{
var channelDispatcher = ( channelDispatcherBase as ChannelDispatcher );
if ( channelDispatcher != null )
{
channelDispatcher.Endpoints.ToList().ForEach( endpoint =>
{
endpoint.DispatchRuntime.InstanceProvider = new UnityInstanceProvinder( serviceDescription.ServiceType );
} );
}
} );
}
public void Validate( ServiceDescription serviceDescription , ServiceHostBase serviceHostBase )
{
}
} using (ServiceHost host = new ServiceHost(typeof(BookService)))
{
host.Description.Behaviors.Add( new UnityInstanceProviderContext() );
}