2012-11-28 32 views
3

崩溃,如果我有一个像Servicestack登记泛型类型

public abstract class BaseService<T,R> : ServiceStack.ServiceInterface.Service 
{ 
    public R Get(T request) 
    { 
    } 
} 

然后服务栈崩溃为我服务的一个基类

试图加载程序格式不正确。

我认为Servicestack在注册服务时应该忽略抽象泛型类。有没有办法告诉服务栈忽略一些服务类?

+0

你能与ServiceStack登录问题[项目的GitHub的问题清单(https://github.com/ServiceStack/ServiceStack/issues) – mythz

+0

我工作围绕这通过重命名Get方法在基类GetBase并在调用GetBase方法的deriven类中添加Get方法 – user1661621

+0

听起来不错。您是否可以编辑您的问题以包含此解决方法?谢谢。我会研究防止ServiceStack中的错误。 – mythz

回答

2

默认情况下,ServiceStack将作为服务候选的程序集中的所有类型包括在内。它在尝试实例化类时会得到该异常。

通过重写宿主类中的CreateServiceManager,您可以注入自己的类型过滤,以便排除抽象和未封闭的泛型。

protected override ServiceManager CreateServiceManager(params Assembly[] assembliesWithServices) 
    { 
     return new ServiceManager(
      new Container(), 
      new ServiceController(
       () => 
       assembliesWithServices.SelectMany(
        assembly => assembly.GetTypes().Where(t => !t.IsAbstract && !t.IsGenericTypeDefinition)))); 
    } 
+0

通过将此方法放入我的AppHost.cs(从AppHostBase继承),这也为我解决了这个问题。我必须添加对System.Reflection,ServiceStack.ServiceHost和Funq的引用才能正确解析各种类型。 –