我们开发了一个 DSL 来帮助编写 Orchard 自定义模块。在生成的驱动程序的 Editor 方法中,我们使用部分方法来允许程序员在需要时覆盖生成的代码行为。
但是,在运行时,我们会收到一个未实现部分方法的异常。
A first chance exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in Microsoft.CSharp.dll
Additional information: 'MyModule.Drivers.CompanyPartDriver' does not contain a definition for 'CustomEditorGet'
根据 C# 规范,它不一定是这样,所以我想知道动态编译(或类似的)是否妨碍了这里。请注意,代码是在运行和调试之前手动编译的,因此不应该有任何代码需要在运行时编译。
有问题的位如下:
public partial class CompanyPartDriver : ContentPartDriver<CompanyPart>
{
// other code
partial void CustomEditorGet(CompanyPart part, dynamic shapeHelper, ref DriverResult result);
protected override DriverResult Editor(CompanyPart part, dynamic shapeHelper)
{
DriverResult result;
if (AdminFilter.IsApplied(HttpContext.Current.Request.RequestContext))
result = ContentShape("Parts_CompanyAdmin_Edit",
() => shapeHelper.EditorTemplate(TemplateName: "Parts/CompanyAdmin",
Model: part,
Prefix: Prefix));
else
result = ContentShape("Parts_Company_Edit",
() => shapeHelper.EditorTemplate(TemplateName: "Parts/Company",
Model: part,
Prefix: Prefix));
CustomEditorGet(part, shapeHelper, ref result);
return result;
}
// other code
}
在另一个文件的部分类中添加“CustomEditorGet”方法实现,即使为空,一切都很好。只添加没有部分方法 impl 的部分类并不能解决它。
有什么想法吗?