无法将2sxc应用注入DNN皮肤文件:错误BC30451‘this未声明’
DNN 9.11.0 + 2sxc 14.11.0:皮肤文件调用IRenderService报BC30451错误的解决方案
错误含义
BC30451是ASP.NET WebForms编译错误,具体原因是:DNN皮肤文件(.ascx)的上下文对象(this代表的Skin实例)并没有公开GetScopedService方法,编译器无法找到该成员,或者该成员的访问级别限制了外部调用。
是否缺少引用
不是。你已添加必要的2sxc及依赖注入命名空间,问题核心是调用上下文对象的方式错误,而非引用缺失。
解决方法
方法1:通过HttpContext获取服务容器
替换原有代码为:
<%= HttpContext.Current.RequestServices.GetRequiredService<ToSic.Sxc.Services.IRenderService>().Module(8196, 21481) %>
确保已添加Microsoft.Extensions.DependencyInjection命名空间(用于调用GetRequiredService方法)。
方法2:使用DNN官方依赖注入解析器
如果HttpContext.Current在特定场景下不可用,改用DNN自带的服务定位器:
<%= DotNetNuke.DependencyInjection.DnnDependencyResolver.Current.GetService<ToSic.Sxc.Services.IRenderService>().Module(8196, 21481) %>
该方式适配DNN 9+的依赖注入体系,与2sxc服务完全兼容。
额外检查项
- 确认模块ID(8196)和内容ID(21481)正确,且目标模块在当前门户下具备访问权限。
- 验证2sxc模块已完整安装、配置,无损坏组件。
内容的提问来源于stack exchange,提问作者Zachary
相关产品推荐
相关产品推荐

