gpt4 book ai didi

c# - 使用新的 WCF Web API 设置 Ninject

转载 作者:太空狗 更新时间:2023-10-29 20:42:14 26 4
gpt4 key购买 nike

所以我一直在研究最新版本的 WCF Web API并决定用它来深入实现 Ninject。

根据我读过的内容,我需要实现 IResourceFactory 接口(interface),它需要以下方法:

    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 方法中所做的 hack 感觉特别脏,所以我想我会利用那些更有经验的人来收紧它。还有其他人使用 WCF Web API 实现了 Ninject 并实现了更清洁的解决方案吗?

感谢任何输入!

最佳答案

您可以通过从应用范围传入内核来实现它。

public class NinjectResourceFactory : IResourceFactory
{
private readonly IKernel _kernel;

public NinjectResourceFactory(IKernel kernel)
{
_kernel = kernel;
}

public object GetInstance(Type serviceType, InstanceContext instanceContext, HttpRequestMessage request)
{
return _kernel.Get(serviceType);
}

public void ReleaseInstance(InstanceContext instanceContext, object service)
{
// no op
}
}

关于c# - 使用新的 WCF Web API 设置 Ninject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5906139/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com