2012-11-07 133 views
2

我對ServiceStack比較陌生,但我喜歡迄今爲止所看到的。不過我想出靠牆就這一個 -作爲ServiceStack剃刀模型的接口

這是我的剃鬚刀模板是什麼樣子 -

@inherits ViewPage<IChallenge> 

@{ 
    foreach (var codeFile in Model.CodeFiles) 
    { 
//do something here 
    } 
} 

這裏,IChallenge是一個接口,以及服務動態地選擇一個給定執行本界面,而返回。該服務是連接到返回接口本身如此 -

public class WebChallenge : IReturn<IChallenge> { /* properties */ } 

不過,我得到以下錯誤,當我運行的代碼 -

不能鍵入「ServiceStack.Razor.Compilation.RazorDynamicObject」隱式轉換爲「 IChallenge」。一個顯式轉換存在(是否缺少強制轉換?)

以此爲與全棧的響應 -

<?xml version="1.0"?> 
<Challenge1Response xmlns="" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
<ResponseStatus> 
<ErrorCode>RuntimeBinderException</ErrorCode> 
<Message>Cannot implicitly convert type 'ServiceStack.Razor.Compilation.RazorDynamicObject' to 'CodeGuru.Exercises.IChallenge'. An explicit conversion exists (are you missing a cast?)</Message> 
<StackTrace> at CallSite.Target(Closure , CallSite , Object) 
at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0) 
at ServiceStack.Razor.Templating.TemplateBase`1.get_Model() 
at CompiledRazorTemplates.Dynamic.faaccadc.Execute() 
at ServiceStack.Razor.Templating.TemplateService.ExecuteTemplate[T](T model, String name, String defaultTemplatePath, IHttpRequest httpReq, IHttpResponse httpRes) 
at ServiceStack.Razor.RazorFormat.ExecuteTemplate[T](T model, String name, String templatePath, IHttpRequest httpReq, IHttpResponse httpRes) 
at ServiceStack.Razor.RazorFormat.ProcessRazorPage(IHttpRequest httpReq, ViewPageRef razorPage, Object dto, IHttpResponse httpRes) 
at ServiceStack.Razor.RazorFormat.ProcessRequest(IHttpRequest httpReq, IHttpResponse httpRes, Object dto) 
at ServiceStack.WebHost.Endpoints.Formats.HtmlFormat.&lt;&gt;c__DisplayClass1.&lt;SerializeToStream&gt;b__0(IViewEngine x) 
at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source, Func`2 predicate) 
at ServiceStack.WebHost.Endpoints.Formats.HtmlFormat.SerializeToStream(IRequestContext requestContext, Object response, IHttpResponse httpRes) 
at ServiceStack.WebHost.Endpoints.Extensions.HttpResponseExtensions.WriteToResponse(IHttpResponse response, Object result, ResponseSerializerDelegate defaultAction, IRequestContext serializerCtx, Byte[] bodyPrefix, Byte[] bodySuffix) 
</StackTrace> 
</ResponseStatus> 
</Challenge1Response> 

,如果我用一個具體的實施此錯誤消失 - 但是我需要能夠發送在運行時選擇的任何實現。有任何想法嗎?

編輯:

我注意到,如果該接口被包裝成另一個強類型對象的屬性,而該對象被用作視圖的模型,它工作正常,我可以訪問接口屬性也是如此。這可能是一種解決辦法,但我想知道是否有人知道更好的答案,因爲這感覺像跳過籃球。

回答

0

你嘗試過一個抽象基類,或者只是一個基類,而不是接口

公共抽象類挑戰:IChallenge

{ }

公共類WebChallenge:挑戰,IReturn

{ }

然後在剃刀

@inherits的ViewPage

+0

我還沒有嘗試過,但同樣它給人的感覺更像一個變通辦法 - 我想知道如何做一個簡單的接口工作作爲一個視圖模型。 –