Quiero inyectar una implementación de mi Interfaz en el WCF, pero quiero inicializar mi contenedor de Inyección de Dependencia en el Cliente del WCF. Entonces puedo tener una implementación diferente para cada cliente de mi servicio.Inyección de Dependencia wcf
Respuesta
Cuando se utiliza svcutil.exe o la Agregar referencia de servicio asistente en Visual Studio, uno de los muchos tipos generada automáticamente será una interfaz de cliente. Llamémoslo IMyService
. También habrá otra interfaz autogenerada llamada algo así como IMyServiceChannel
que implementa IMyService e IDisposable. Use esta abstracción en el resto de su aplicación cliente.
Puesto que usted quiere ser capaz de crear un nuevo canal y cerrarla de nuevo, puede introducir una fábrica Resumen:
public interface IMyServiceFactory
{
IMyServiceChannel CreateChannel();
}
En el resto de la aplicación cliente, se puede tomar una dependencia de IMyServiceFactory:
public class MyClient
{
private readonly IMyServiceFactory factory;
public MyClient(IMyServiceFactory factory)
{
if (factory == null)
{
throw new ArgumentNullException("factory");
}
this.factory = factory;
}
// Use the WCF proxy
public string Foo(string bar)
{
using(var proxy = this.factory.CreateChannel())
{
return proxy.Foo(bar);
}
}
}
puede crear una aplicación concreta de IMyServiceFactory que envuelve WCF de ChannelFactory<T>
como una implementación:
public MyServiceFactory : IMyServiceFactory
{
public IMServiceChannel CreateChannel()
{
return new ChannelFactory<IMyServiceChannel>().CreateChannel();
}
}
Ahora puede configurar su contenedor DI asignando IMyServiceFactory a MyServiceFactory. Así es como se hace en el castillo de Windsor: información
container.Register(Component
.For<IMyServiceFactory>()
.ImplementedBy<MyServiceFactory>());
Bonus: Aquí está how to wire up a WCF service with a DI Container.
Aquí es lo que entiendo de su pregunta:
Usted tiene una interfaz que no está relacionado con WCF. Vamos a llamarlo IInterface
Tiene un cliente WCF que utilizó un servicio. Llamemos al contrato de servicio: IService
desea la clase ServiceClient que implemente de forma predeterminada IService cuando agrega una referencia de servicio también para implementar IInterface.
Si este es el caso, puede utilizar el hecho de que la clase ServiceClient está marcada como parcial.
Simplemente haga otra declaración parcial para ServiceClient y agregue la interfaz que necesita (Debe asegurarse de que los espacios de nombres sean iguales para el código generado automáticamente y su código). Debería verse algo así como:
namespace [ServiceClient Namespace]
{
public partial class ServiceClient : IInterface
{
}
}
Hope it help.
- 1. inyección WCF La dependencia y la fábrica de resumen
- 2. Inyección de Dependencia con PowerShell
- 3. alternativas de inyección de dependencia
- 4. Inyección de dependencia en MVC
- 5. Inyección de dependencia sin marco
- 6. Inyección de dependencia con Jersey
- 7. La inyección de dependencia con múltiples repositorios
- 8. Dependencia Inyección a los módulos
- 9. Unity [dependencia] inyección y Herencia
- 10. Inyectando el Inyector de Dependencia usando la Inyección de Dependencia
- 11. Inyección de dependencia C#: cómo inyectar una dependencia sin fuente?
- 12. bibliotecas de inyección de dependencia de Ruby
- 13. Mejores prácticas de inyección de dependencia
- 14. Marco de inyección de dependencia mono compatible
- 15. Inmutabilidad después de inyección de dependencia, inicialización
- 16. Marcos de inyección de dependencia: ¿Cómo funcionan?
- 17. Implementación de MVVMC e Inyección de Dependencia
- 18. resolviendo dependencias circulares con inyección de dependencia
- 19. Burlarse sin IoC o Inyección de Dependencia
- 20. ¿Existe inyección de dependencia en Rails?
- 21. Usar la inyección de dependencia para Properties.Settings.Default?
- 22. La inyección de dependencia y la fábrica
- 23. ASP.NET MVC: HTTPContext e Inyección de Dependencia
- 24. Usa correctamente la inyección de dependencia
- 25. ¿Qué es la Inyección de Dependencia?
- 26. Inyección de dependencia con el archivo ".properties"
- 27. Logging Spring Bean creación/inyección de dependencia
- 28. Inyección de dependencia en un bucle
- 29. Inyección de Dependencia con Spring/Junit/JPA
- 30. inyección de dependencia en su Singleton
Bien, pero ¿cómo hago para inyectar en servicio una implementación personalizada de una clase? Ejemplo: interfaz pública ISendMail {seng (asunto de cadena, mensaje de cadena, cadena a); }. Quiero implementar una clase diferente para cada cliente y en el cliente, inyectar esta implementación en el Servicio WCF. Tks –
El código puede no mostrar complejidad ciclomática o cualquier otra palabra de moda, pero lo que sí sé es que, tomado en su forma actual, esto requiere mucha conexión si tiene más de unos pocos servicios que le interesan. requiere un enfoque más genérico para valer la pena en proyectos más grandes, IMO. – brumScouse
Sigues usando esa palabra. No creo que signifique lo que piensas que significa. –