0

在 WCF Svc 标记文件中,我想使用泛型类型作为工厂:

<%@ ServiceHost Language="C#" Debug="true" Factory="MY_GENERIC_TYPE_GOES_HERE" Service="WebSrv.MyService" CodeBehind="MyService.svc.cs" %>

我的泛型类的定义是这样的:

namespace Tools.Services
{
   public class ServiceHostFactory<TService> : System.ServiceModel.Activation.ServiceHostFactoryBase
   {
          //...
   }
}

如何使用给定的类型作为模板类型引用此类型,我的意思是这样的:

Tools.Services.ServiceHostFactory<WebSrv.MyService>

通过查看MSDN Type.GetType文档,我尝试了以下操作,但没有成功:

<%@ ServiceHost Language="C#" Debug="true" Service="WebSrv.MyService" Factory="Tools.Services.ServiceHostFactory`1[WebSrv.MyService]"  CodeBehind="MyService.svc.cs" %>  

输出:

“/”应用程序中的服务器错误。解析器错误描述:解析服务此请求所需的资源时发生错误。请查看以下特定的解析错误详细信息并适当地修改您的源文件。

解析器错误消息:在服务编译期间无法加载 CLR 类型“Tools.Services.ServiceHostFactory`1[WebSrv.MyService]”。验证此类型是否定义在位于应用程序的 \App_Code 目录中的源文件中、包含在位于应用程序的 \bin 目录中的已编译程序集中,或者存在于安装在全局程序集缓存中的程序集中。请注意,类型名称区分大小写,\App_Code 和\bin 等目录必须位于应用程序的根目录中,不能嵌套在子目录中。

输出:

“/”应用程序中的服务器错误。无法加载文件或程序集“Tools.Services”或其依赖项之一。该系统找不到指定的文件。

<%@ ServiceHost Language="C#" Debug="true" Service="WebSrv.MyService" Factory="Tools.Services.ServiceHostFactory`1[WebSrv.MyService,WebSrv ],Tools.Services"  CodeBehind="MyService.svc.cs" %>

输出:

“/”应用程序中的服务器错误。无法加载文件或程序集“Tools.Services”或其依赖项之一。该系统找不到指定的文件。

这甚至可以以通用方式实现吗?

4

1 回答 1

0

我刚刚找到了答案:
我必须在这里使用双括号
而且因为涉及来自两个不同程序集的两种类型,我必须通过以下方式完全限定它们:

Tools.Services.ServiceHostFactory`1[[WebSrv.MyService, WebSrv]], Tools.Services

希望这会对某人有所帮助。

于 2015-09-03T15:00:00.150 回答