我有一个asp.net mvc应用程序,需要在其中调用wcf服务。我已经为项目添加了服务参考。我使用unity进行依赖注入,并希望注入wcf客户端。但由于System.ServiceModel.ClientBase,它并不那么简单。我是这样做的。
这是一个自动生成的代理:
public partial class WcfServiceClient :
System.ServiceModel.ClientBase<WcfUnity.IWcfServiceClient>,
WcfUnity.IWcfServiceClient
{
//autogenerated constructors and methods
}
我创建了界面:
public interface ISimpleProxy : WcfUnity.IWcfServiceClient
{
//duplication of methods' signatures
void CloseConnection();
}
我使用partial class:
扩展了WcfServiceClientpublic partial class WcfServiceClient : ISimpleProxy
{
public void CloseConnection()
{
try
{
Close();
}
catch (Exception)
{
Abort();
}
}
}
并像这样注入:
container.RegisterType<ISimpleProxy>(new InjectionFactory(c => new WcfServiceClient()));
所以我没有来自ClientBase的dependecies,并且在使用这个wcf代理的类中没有wcf内容。这个解决方案是否有一些缺点?
答案 0 :(得分:1)
不,它没有,我使用(大多数)相同的方法。
我建议你让你的界面继承自IDisposable
,因为底层ClientBase<T>
是一次性的。这样您就不会需要CloseConnection
。