2016-08-01 257 views
-1

我有以下的類定義的工作原理:定義類泛型類型

public class AsyncValidationRequestHandler<TRequest, TResponse> : IAsyncRequestHandler<TRequest, TResponse> 
    where TRequest : IAsyncRequest<TResponse> { } 

但我需要定義τ響應的信封,其中信封是:

public class Envelope<T> { } 

我試過如下:

public class AsyncValidationRequestHandler<TRequest, TResponse> : IAsyncRequestHandler<TRequest, TResponse> 
    where TRequest : IAsyncRequest<TResponse> 
    where TResponse : Envelope<TModel> { } 

基本上,我定義一個包絡爲:

ModalA modelA = new ModelA(); 
Envelope<ModelA> envelopeA = new Envelope<ModelA>(); 

ModalB modelB = new ModelB(); 
Envelope<ModelB> envelopeB = new Envelope<ModelB>(); 

而且我知道我的回答是永遠的東西信封...

但我的代碼不能編譯。我得到錯誤:

The type or namespace name 'TModel' could not be found (are you missing a using directive or an assembly reference?)  

如何解決這個問題?我需要一個界面嗎?

+0

是什麼''TModel''這裏? –

+0

你實際上是否在'EnvelopeTModel>中缺少左尖括號?就像在你的代碼片段中顯示的那樣?究竟是什麼導致它不能編譯的消息? – Zack

+0

@EhsanSajjad TModel是一個通用類型 –

回答

4

您將需要申報TModel作爲一種通用的參數,也:

public class AsyncValidationRequestHandler<TRequest, TResponse, TModel> : IAsyncRequestHandler<TRequest, TResponse> 
    where TRequest : IAsyncRequest<TResponse> 
    where TResponse : Envelope<TModel> { }