将 Ninject 与 WebServiceHost 一起使用的正确方法是什么(在 IIS 中托管时)
请注意,我没有 .svc 文件并且不想要一个。所以我有无扩展名的网址。我正在使用 Ninject 将 repo 等注入服务。虽然它有效,但我不记得我以前是怎么做的,我现在做的方式是错误的 - 它实际上像自托管一样工作 - 我需要服务参与 IIS 管道(使用相同的端口,启动/关闭与应用程序池)...
我添加了对 Ninject.Extensions.WCF 的引用,它在我的 App_Start 文件夹中创建了 NinectWebCommon.cs。在其中,我按如下方式连接服务(但我不想指定 url/端口,我希望它参与正确的生命周期)
private static void RegisterServices(IKernel kernel)
{
var port = 8080;
var uri = new Uri(String.Format("http://{0}:{1}/api", Environment.MachineName, port));
var baseAddr = new Uri[] { uri };
var binding = new WebHttpBinding(WebHttpSecurityMode.None);
var endPoint = new ServiceEndpoint(ContractDescription.GetContract(typeof(MyServiceClassHere))
, binding, new EndpointAddress(uri));
kernel.Bind<IProjectRepository>().To<MyRepo>();
kernel.Bind<WebServiceHost>().To<NinjectWebServiceHost>()
.WithConstructorArgument("serviceType", typeof(MyServiceClassHere))
.WithConstructorArgument("baseAddresses", baseAddr);
var webBehavior = new WebHttpBehavior() { HelpEnabled = true };
endPoint.Behaviors.Add(webBehavior);
_host = kernel.Get<WebServiceHost>();
_host.AddServiceEndpoint(endPoint);
_host.Open();
}
您能否帮助我了解使用 Ninject 连接服务的最佳实践。
提前致谢。