因此,我一直在玩弄WCF Web API的最新版本,并决定我想用它来实现Ninject。使用新的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方法中所做的破解感觉特别脏,所以我想我会挖掘那些更加有经验的人来收紧它。是否有其他人使用WCF Web API实施Ninject并实施了更清洁的解决方案?
感谢您的任何意见!
这看起来和我在结构图上做的东西比较相似。传递对象总是感觉有点冒险,但如果它的框架给了你什么,除了滚动你自己之外还有什么选择。 – 2011-05-06 02:44:14