Así que he estado jugando con la última versión de WCF Web API y decidí que quería sumergirme en la implementación de Ninject con ella.Configuración de Ninject con la nueva API web de WCF
base de lo que he leído que necesito para implementar la interfaz IResourceFactory que exige los siguientes métodos:
public object GetInstance(System.Type serviceType,
System.ServiceModel.InstanceContext instanceContext,
System.Net.Http.HttpRequestMessage request);
public void ReleaseInstance(System.ServiceModel.InstanceContext instanceContext,
object service);
Así pollo Rasqué a cabo el siguiente:
public class NinjectResourceFactory : IResourceFactory
{
private readonly IKernel _kernel;
public NinjectResourceFactory()
{
var modules = new INinjectModule[]
{
new ServiceDIModule(), //Service Layer Module
new RepositoryDIModule(), //Repo Layer Module
new DataServiceDIModule()
};
_kernel = new StandardKernel(modules);
}
#region IResourceFactory Members
public object GetInstance(Type serviceType,
InstanceContext instanceContext,
HttpRequestMessage request)
{
return Resolve(serviceType);
}
public void ReleaseInstance(InstanceContext instanceContext, object service)
{
throw new NotImplementedException();
}
#endregion
private object Resolve(Type type)
{
return _kernel.Get(type);
}
//private T Resolve<T>()
//{
// return _kernel.Get<T>();
//}
//private T Resolve<T>(string name)
//{
// return _kernel.Get<T>(metaData => metaData.Has(name));
// return _kernel.Get<T>().Equals(With.Parameters.
// ContextVariable("name", name));
//}
}
y por cable hasta con
var configuration = HttpHostConfiguration.Create().SetResourceFactory(new NinjectResourceFactory());
RouteTable.Routes.MapServiceRoute<StateProvinceResource>("States", configuration);
Sorprendentemente, esto parece funcionar. El primer método de recursos que creé para atender una lista de estados/provincias genera resultados con HTTP 200 OK.
Por lo tanto, a la pregunta. ¿Hay alguna manera de escribir esta fábrica? cleaner Realmente me puse nervioso y simplemente no me siento bien. Siento que me estoy perdiendo algo obvio, mirándome a la cara. El truco que hice en el nuevo método Resolve se siente especialmente sucio, así que pensé que podría recurrir a los más experimentados para ajustar esto. ¿Alguien más ha implementado Ninject con WCF Web API e implementado una solución más limpia?
¡Gracias por cualquier entrada!
esto se ve relativamente similar a algo que he hecho con structuremap. pasar objetos siempre se siente un poco hacky, pero si es lo que te da el marco, qué opción hay, además de hacer tu propio curso. –