首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >怎样才能正确地在WebServiceHost中使用Ninject

怎样才能正确地在WebServiceHost中使用Ninject
EN

Stack Overflow用户
提问于 2013-10-01 18:14:34
回答 1查看 250关注 0票数 3

在IIS中托管时,使用WebServiceHost的正确方法是什么?

请注意,我没有.svc文件,也不想要一个。因此,我有无扩展的url。我正在使用尼尼姆注入回购等服务。虽然它能工作,但我不记得我以前是怎么做的,而且我现在这样做是错误的--它实际上就像一个自托管的--我需要服务来参与IIS管道(使用相同的端口,与AppPool一起启动/关闭).

我添加了一个对Ninject.Extensions.WCF的引用,它在我的App_Start文件夹中创建了NinectWebCommon.cs。在此范围内,我正在按以下方式连接服务(但我不想指定url/port,我希望它参与适当的生命周期)

代码语言:javascript
复制
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();
}  

请你帮助我的最佳做法,连接服务使用尼尼姆。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-11-16 08:53:18

这篇博文帮助我在IIS:http://www.aaronstannard.com/post/2011/08/16/dependency-injection-ninject-wcf-service.aspx中托管的WCF服务中启动并运行Ninject。

我必须重写NinjectModule上的Load方法:

代码语言:javascript
复制
public class WCFNinjectModule : NinjectModule
{
    public override void Load()
    {
       Bind<IProjectRepository>().To<MyRepo>();
    }
}

然后在global.asax中,我必须重写CreateKernel()方法。

代码语言:javascript
复制
    protected override IKernel CreateKernel()
    {
            StandardKernel kernel = new StandardKernel(new WCFNinjectModule());
            kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
            kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
            return kernel;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19123068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档