そのため、私は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);
驚くべきことに、これはうまくいくようです。州/州のリストを提供するために作成した最初のリソースメソッドは、HTTP200OKで出力を生成します。
だから、質問に。このファクトリを書くためのよりクリーンな方法はありますか?私は本当にそれをいじくり回しました、そしてそれはちょうど気分が悪いです。顔を見つめている明らかな何かが欠けているような気がします。新しいResolveメソッドで行ったハックは特に汚い感じがするので、経験豊富な人を利用してこれを強化すると思いました。他の誰かがWCFWebAPIを使用してNinjectを実装し、よりクリーンなソリューションを実装しましたか?
ご入力いただきありがとうございます。