2016-08-08 6 views
0

を使用してMVCのコントローラから結果/リクエストオブジェクトの種類を取得します。要求オブジェクトおよび各コントローラの結果オブジェクトを含む。私はこのコードを使用して反射によるDLLからのActionResultを返すすべてのメソッドを得た反射

一般的に、私のプロジェクトでは、コントローラの構造はこれです:

[ServiceControllerResult(typeof(MyControllerResult))] 
public ActionResult MyController(MyControllerRequest request) 
{ 
    var response = new ServiceResponse<MyControllerResult>(); 
    // do something 
    return ServiceResult(response); 
} 

、私はDLLからMyControllerResultとMyControllerRequestオブジェクトを取得する方法(または私の参照DDLを格納しているディレクトリから) ?

おかげ

答えて

2

あなたは、要求の種類を特定し、結果の型を取得するために、メソッドの属性を調査するために、メソッドのパラメータを確認することができます。 ServiceControllerResult属性はType性質を持っていると仮定:

foreach (var method in methods) 
{ 
    var parameters = method.GetParameters(); 
    if (parameters.Length != 1) 
    { 
     //decide what to do here 
     throw new Exception("More than one parameter found"); 
    } 

    var requestType = parameters[0].ParameterType; 

    var serviceControllerResultAttribute = method.GetCustomAttribute<ServiceControllerResultAttribute>(); 
    if (serviceControllerResultAttribute == null) 
    { 
     //decide what to do here 
     throw new Exception("ServiceControllerResultAttribute was not found"); 
    } 

    var resultType = serviceControllerResultAttribute.Type; 
} 
+0

[OK]を、私は、パラメータの型ではなくServiceControllerResult内部のオブジェクトを得ました。 メソッドはServiceControllerResultオブジェクトを返しますが、MyControllerResultオブジェクトが必要です。私を助けてくれますか? – elviuz

+0

'ServiceControllerResult'を返さず、その中に格納されている型を返します。 'ServiceControllerResultAttribute'のコードを投稿できますか?コンストラクタからのパラメータ(型)はどこに格納されますか? –

+0

申し訳ありませんが、それが正しいです。解決済み:) – elviuz

関連する問題