2012-11-28 60 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的引用才能正確解析各種類型。 –