Ссылка (загрузка) универсального типа по его имени в файле разметки WCF Svc

В файле разметки 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" или одну из ее зависимостей. Система не может найти указанный файл.

Это вообще возможно достичь в общем виде??


person John-Philip    schedule 03.09.2015    source источник


Ответы (1)


Я только что нашел ответ:
здесь мне пришлось использовать двойные скобки.
А поскольку использовались два типа из двух разных сборок, мне пришлось полностью квалифицировать каждый из них следующим образом:

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

Надеюсь, это поможет кому-то.

person John-Philip    schedule 03.09.2015