Итак, я поигрался с последним выпуском WCF Web API и решил, что хочу погрузиться в реализацию Ninject с ним.
На основании прочитанногоМне нужно реализовать интерфейс IResourceFactory, который требует следующих методов:
public object GetInstance(System.Type serviceType,
System.ServiceModel.InstanceContext instanceContext,
System.Net.Http.HttpRequestMessage request);
public void ReleaseInstance(System.ServiceModel.InstanceContext instanceContext,
object service);
Поэтому я поцарапал следующее:
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));
//}
}
и связал его с
var configuration = HttpHostConfiguration.Create().SetResourceFactory(new NinjectResourceFactory());
RouteTable.Routes.MapServiceRoute<StateProvinceResource>("States", configuration);
Удивительно, но это похоже на работу.Первый метод ресурсов, который я создал для предоставления списка штатов / провинций, генерирует выходные данные с HTTP 200 OK.
Итак, к вопросу.Есть ли чище способ написания этой фабрики?Я действительно провалился через это, и это просто не чувствуется правильным.Я чувствую, что скучаю по чему-то очевидному, уставившемуся мне в лицо.Взлом, который я сделал в новом методе Resolve, кажется особенно грязным, поэтому я решил использовать более опытных, чтобы усилить это.Кто-нибудь еще реализовал Ninject с помощью веб-API WCF и внедрил более чистое решение?
Спасибо за любой вклад!