-1
SOAPとRESTの動的Webサービスを作成しました。次に、WCFデータサービス仕様に従ってIQueryable Interfaceを返す操作を持つOData Webサービスを作成する必要があります。 IL Emitステートメントに基づいて動的メソッドを作成しています。しかし、IQueryableであるMethodBuilderに戻り型を割り当てることができません。CIL MethodBuilderとIQueryableを使用した動的メソッドの作成<DynamicType>戻り値の型
具体的には、戻り値の型IQueryableが実行時に生成されるため、MethodBuilder.SetReturnTypeメソッドを使用して戻りパラメータを設定できません。
public class MainClass
{
public static void Main()
{
AssemblyBuilder serviceAsmBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName("MyDynamicAsm"), AssemblyBuilderAccess.RunAndSave);
ModuleBuilder serviceModule = serviceAsmBuilder.DefineDynamicModule("MyDynamicAsm", "MyDynamicAsm.dll");
TypeBuilder serviceTypeBuilder = serviceModule.DefineType("MyDynamicType", TypeAttributes.Public | TypeAttributes.Class | TypeAttributes.AutoClass | TypeAttributes.AnsiClass,
typeof(DataService<WebServerResult>));
//This is the problem, as I do not have this class at compile
//time. I get this class at run time
Type returnType = typeof(IQueryable<WebServerResult>);
MethodBuilder MethodBldr = serviceTypeBuilder.DefineMethod("OperationName", MethodAttributes.Public, returnType, Type.EmptyTypes);
ILGenerator methodGenerator = MethodBldr.GetILGenerator();
methodGenerator.Emit(OpCodes.Ret);
}
}
//This is just for reference. This code does not exist at design time
[DataContract]
public class WebServerResult
{
[DataMember]
public List<Variable> Variables { get; set; }
public IQueryable<Variable> ODataResultList
{
get { return Variables.AsQueryable<Variable>(); }
}
}
[DataServiceKey("VariableName")]
[DataContract(Namespace = "")]
public class Variable
{
[DataMember]
public string VariableName { get; set; }
[DataMember]
public string VariableValue { get; set; }
[DataMember]
public string VariableType { get; set; }
}
IL生成コードのメソッド生成の青いプリントを私に提供することはできますか?
[のIQueryable戻り値の型とMethodBuilderを使用した動的方法](の可能性のある重複http://stackoverflow.com/questions/42654679/dynamic-method-using-methodbuilder-with- –
thehennyy
私は新しい質問をすることはできません..元の投稿を削除しました – badari
私は投票しませんでした。とにかくここでも同じ質問をしています。まだ不明な点は何ですか? SetReturnTypeメソッドの唯一のパラメータとして、型オブジェクトを渡すだけです。 – thehennyy