当前位置: 首页 > 编程语言 > C#

使用Ninject2向WCFServiceHost类型传递参数Share

时间:2023-04-10 22:59:57 C#

使用Ninject2向WCFServiceHost类型传递参数我想使用Ninject.Wcf扩展来创建参数化ServiceHost实例。例如,我有一个只有以下构造函数的MyWCFHandler类:publicMyWCFHandler(UserManagermanager){_manager=manager;但是当我写varmyServiceHost=newServiceHost(typeof(MyWCFHandler));我无法将依赖对象传递给构造函数。我不想弄乱我在如何将值传递给我的wcf服务上的构造函数?我决定采用Ninject方式,但不太了解如何在我的情况下采取行动。以下是我对Ninject工作中的WCF扩展的理解:在我的项目中参考Ninject和Ninject.Extensions.WCF。创建一个继承Ninject模块的类并编写以下内容:将使用newServiceModule()初始化的内核添加到KernelContainer。像这样使用NinjectServiceHost:varservice=KernelContainer.Kernel.Get();_host=newNinjectServiceHost(服务);在那里我应该让我的主机准备好打开。问题是:我应该如何将构造函数参数传递给NinjectModule?当我准备好将参数绑定到NinjectModule时,我是否应该创建一个NinjectModule实例?如何将它们传递给Get方法?遗憾的是,没有一个示例仅显示参数化的ServiceHost启动。我什至不在乎我用的是不是Ninject。这两种解决方案都有一个很好的例子——我很好,因为我只是在决定使用哪个IoC容器。关于ninject。答案取决于您是希望为每个请求提供单一服务还是新实例。使用单件服务,您可以执行以下操作:publicclassTimeServiceModule:NinjectModule{//////将模块加载到内核中。///publicoverridevoidLoad(){this.Bind().To();this.Bind().ToMethod(ctx=>ctx.Kernel.Get(newConstructorArgument("singletonInstance",c=>c.Kernel.Get())));}}internalstaticclassProgram{privatestaticvoidMain(){varkernel=newStandardKernel(newTimeServiceModule());varserviceHost=kernel.Get();serviceHost.AddServiceEndpoint(typeof(ITimeService),newNetTcpBinding(),"net.tcp://localhost/TimeService");尝试{serviceHost.Open();}最后{serviceHost.Close();}}}点击请求方式:publicinterfaceIServiceTypeProvider{//////获取服务类型。//////服务类型。IEnumerable类型{get;}}FuncserviceHostFactoryforeach(TypeserviceTypeinthis.ServiceTypeProvider.Types){//我在这里做了一些魔术来查询基础契约,因为我们所有的服务都实现了一个标记接口。但你不需要这个。但是你可能需要扩展类型提供者接口。IEnumerablecontracts=QueryBaseContracts(serviceType);varhost=this.CreateHost(serviceType);foreach(在合同中输入合同){Bindingbinding=this.CreateBinding();this.CreateEndpointAddress(合同);this.AddServiceEndpoint(host,contract,binding,address);}host.Description.Behaviors.Add(newServiceFacadeBehavior());这个.OpenHost(主机);this.serviceHosts.Add(host);}protectedvirtualServiceHostCreateHost(TypeserviceType){returnthis.serviceHostFactory(serviceType);}publicclassYourWcfModule:NinjectModule{//////将模块加载到内核中。///publicoverridevoidLoad(){this.Bind>().ToMethod(ctx=>(serviceType)=>ctx.Kernel.Get(newConstructorArgument("serviceType",serviceType),newConstructorArgument("baseAddresses",新的Uri[]{})));}}玩得开心以上就是C#学习教程:使用Ninject2给WCFServiceHost类型传递参数的所有内容分享,如果对大家有用需要进一步了解C#希望大家多多关注教程。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: