Così ho giocato con l'ultima versione di WCF Web API e ho deciso di approfondire l'implementazione di Ninject.Impostazione di Ninject con la nuova API Web WCF
base al largo quello che ho letto ho bisogno di attuare l'IResourceFactory interfaccia che richiede i seguenti metodi:
public object GetInstance(System.Type serviceType,
System.ServiceModel.InstanceContext instanceContext,
System.Net.Http.HttpRequestMessage request);
public void ReleaseInstance(System.ServiceModel.InstanceContext instanceContext,
object service);
così ho pollo scalfito la seguente out:
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));
//}
}
e cablato in su con
var configuration = HttpHostConfiguration.Create().SetResourceFactory(new NinjectResourceFactory());
RouteTable.Routes.MapServiceRoute<StateProvinceResource>("States", configuration);
Incredibilmente, questo sembra funzionare. Il primo metodo di risorsa che ho creato per fornire un elenco di stati/province genera output con HTTP 200 OK.
Quindi, alla domanda. C'è un modo per scrivere cleaner? Mi sono davvero fottuto e non mi sembra giusto. Mi sento come se mi mancasse qualcosa di ovvio che mi fissava in faccia. L'hack che ho realizzato con il nuovo metodo Resolve mi sembra particolarmente sporco, quindi ho pensato di attingere a quelli più esperti per stringere la questione. Qualcun altro ha implementato Ninject con l'API Web WCF e implementato una soluzione più pulita?
Grazie per qualsiasi input!
questo sembra relativamente simile a qualcosa che ho fatto con structuremap. passare intorno agli oggetti sembra sempre un po 'hacky, ma se è ciò che ti dà la struttura, che scelta c'è, oltre a farti strada naturalmente. –