2010-09-21 24 views

Respuesta

4

Para inyectar dependencias en los servicios de WCF tuve que implementar una fábrica de host de servicio.

He encontrado un tutorial paso a paso here.

Básicamente, usted tiene que:

  1. implementar un IInstanceProvider para crear servicios utilizando el contenedor
  2. Implementar un IServiceBehavior para establecer el proveedor de ejemplo en el despachador de punto final
  3. Extender ServiceHost para añadir el nuevo comportamiento en servicio
  4. Extender ServiceHostFactory para crear el nuevo host de servicio
+0

¿Es ese el mejor? Ya lo he visto y parece complicado. ¿Algo más simple que eso? – SVI

+0

Esto es ahora un enlace muerto. –

+1

@BrianGideon He reparado el enlace, gracias – onof

5

This answer da un ejemplo de cómo habilitar DI en WCF con Castle Windsor.

basta con sustituir el IWindsorContainer con un IUnityContainer en el ejemplo y que debería estar todo listo, aunque también se puede querer cambiar los nombres de las clases de WindsorXyz a UnityXyz :)

2

Estoy a punto de darle una oportunidad a La biblioteca Unity.Wcf (https://github.com/ViceIce/unity.wcf), a primera vista se ve bastante bien. He leído en este this article:

Si usted es anfitrión de su servicio WCF dentro de un servicio de Windows utilizando un ServiceHost, reemplazar la instancia ServiceHost con la costumbre Unity.Wcf.UnityServiceHost. Encontrará que UnityServiceHost toma un contenedor de Unity como su primer parámetro, pero por lo demás es idéntico al ServiceHost predeterminado.

Como es mi caso voy a hacer esto ...

class Program 
{ 
    static void Main(string[] args) 
    { 
     // 1st Initialize the Host (Configures Container and Factories) 
     ServiceHostController.Initialize(); 

     // 2nd Create a URI to serve as the base address. 
     var baseAddress = new Uri("http://localhost:54321/BlaBlaBla/"); 

     // 3rd Create a UnityServiceHost instance 
     var myService = new UnityServiceHost(ServiceHostController.UnityContainer, typeof(MyService), baseAddress); 

     try 
     { //etcetera... 

Y funcionó para mí, todavía tengo algunas cosas que refactorizar y añadir características y métodos, pero el punto de partida Funciona de maravilla.

Espero que ayude.

Cuestiones relacionadas