我是Spring.Net的新手。 我有一个wcf服务类,需要另一个服务的代理,如:
[ServiceContract]
Interface IService1{
[OperationContract]
void show();
}
[ServiceContract]
Interface IService2{
[OperationContract]
void show();
}
class Service1:IService1
{
public IService2 Service2
{
get;set;
}
public void Show()
{
Service2.Show();
}
}
如何通过在Spring.Net的App.config文件中配置service1代理中的service2代理来注入Service2代理?
App.config文件 @bbai请找到下面的app.config文件。我在Program.cs文件中创建ServiceHost。
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core"/>
</sectionGroup>
<object id="Service1Obj" singleton="false"
type="MyNamespace.Service1, MyAssembly">
<!-- Setter injection-->
<property name="Service2" ref="Service2"/>
</object>
<object id="Service2Obj" singleton="false"
type="MyNamespace.Service2, MyAssembly">
</object>
<!-- Creating Client side proxy dynamically-->
<object id="Service1"
type="MyNamespace.IService1, MyAssembly"
factory-object="Service1ChannelFactory"
factory-method="CreateChannel" />
<object id="Service1ChannelFactory"
type="System.ServiceModel.ChannelFactory<MyNamespace.IService1>, System.ServiceModel">
<constructor-arg name="endpointConfigurationName" value="Service1Endpoint" />
</object>
<object id="Service2"
type="MyNamespace.IService2, MyAssembly"
factory-object="Service2ChannelFactory"
factory-method="CreateChannel" />
<object id="Service2ChannelFactory"
type="System.ServiceModel.ChannelFactory<MyNamespace.IService2>, System.ServiceModel">
<constructor-arg name="endpointConfigurationName" value="Service2Endpoint" />
</object>
</objects>
<service name="Service2Obj" behaviorConfiguration="DefaultBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8001"/>
</baseAddresses>
</host>
<endpoint address=""
binding="basicHttpBinding"
contract="MyNamespace.IService2" />
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="DefaultBehavior">
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="True"/>
</behavior>
</serviceBehaviors>
</behaviors>
<client>
<!--<endpoint name="serverWebCalculatorEndpoint" address="http://localhost:2637/Spring.WcfQuickStart.ServerWeb/Calculator.svc" binding="basicHttpBinding" bindingConfiguration="basicHttpBinding1" contract="Spring.WcfQuickStart.ICalculator"/>-->
<endpoint name="Service1Endpoint" address="http://localhost:8000" binding="basicHttpBinding" bindingConfiguration="" contract="MyNamespace.IService1"/>
<endpoint name="Service2Endpoint" address="http://localhost:8001" binding="basicHttpBinding" bindingConfiguration="" contract="MyNamespace.IService2"/>
</client>
答案 0 :(得分:1)
在WCF中使用IoC并不简单,但在这种情况下,您可以使用IInstanceProvider
在创建服务时解析对IService2的引用。 http://blogs.msdn.com/b/carlosfigueira/archive/2011/05/31/wcf-extensibility-iinstanceprovider.aspx上的帖子有一个使用该接口为WCF服务实现简单IoC容器的示例。
答案 1 :(得分:1)
像这样:
<objects xmlns="http://www.springframework.net"
xmlns:wcf="http://www.springframework.net/wcf">
<!-- Service2 proxy -->
<wcf:channelFactory id="Service2"
channelType="MyNamespace.IService2, MyAssembly"
endpointConfigurationName="Service2Endpoint" />
<!-- Service 1 -->
<object id="Service1" type="MyNamespace.Service1, MyAssembly" singleton="false">
<property name="Service2" ref="Service2" />
</object>
</objects>
此处有更多文档:http://www.springframework.net/doc-latest/reference/html/wcf.html