- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在我的 Asp.Net MVC 应用程序中,我有一些 View 文件 (.cshtml
),它引用了将在运行时加载的外部库。所以在应用程序启动后,我通过 Assembly.Load 加载程序集,并通过我自己的自定义 ControllerFactory
注册 Controller ,一切正常。
但是,在某些引用了动态加载程序集的 View 中,抛出:
Compiler Error Message: CS0234: The type or namespace name 'MyDynamicNamespace' does not exist in the namespace 'MyApp' (are you missing an assembly reference?)
告诉 razor 编译器无法解析相关程序集的异常。
我的问题是,有没有办法在运行时注册程序集,使 razor 编译器可以访问它并解析它?
注意我不能使用BuildManager.AddReferencedAssembly
方法,因为我的程序集必须在应用程序启动后加载,而BuildManager
不支持。
最佳答案
1) 我不建议让您的 View 直接使用外部引用或动态加载的外部引用。通过让您的 View 与 Controller 交互来抽象它。让您的 Controller 将一个数据对象提供给您的 View ,该数据对象在您的应用程序构建时已知(换句话说,一个在构建时您的 Web 应用程序已知的对象)。这是为了从您的 View 中完全隔离(抽象)插件特定业务。然后让您的 Controller 与“插件”交互。
2) 我不知道你的“定制工厂”是如何工作的,但现在我们真的不再 build 任何“定制工厂”了。相反,我们利用依赖注入(inject)容器,例如 Microsoft Unity(或 Ninject,或 CaSTLe Windsor 等)。创建“自定义工厂”是非常老套的做法,您基本上是在重新发明已通过依赖注入(inject)解决的轮子。
3) 至于动态加载外部程序集,我不知道你是否正确,但这里有一个链接:
Dynamically load a type from an external assembly
4) 通常,插件设计会在构建时公开您的主 Web 应用程序已知的接口(interface)。插件设计隐藏的是可以从一个插件更改为另一个插件的实现。重要的是每个插件都实现相同的公共(public)接口(interface),这些接口(interface)是您的主要 Web 应用程序所期望的。通常,您会将这些接口(interface)放在一个单独的“通用”项目中,该项目由您的主 Web 应用程序和实现这些接口(interface)的插件引用。因此,从您的主 Web 应用程序中,您将知道插件的公共(public)接口(interface)是什么,您可以动态加载外部程序集并使用 C# 反射找到实现这些接口(interface)的类并将它们加载到您的依赖注入(inject)容器中。同样,任何想要为您的网络应用程序开发插件的人都必须实现在您的“通用”项目中定义的接口(interface)。
注意:“Common”只是我给项目随机取的名字。您可以将其命名为“PluginInterface”或任何您想要的名称。
在那之后,让你的 Controller 从依赖注入(inject)容器中获取它需要的任何东西是微不足道的。
注意:您的插件接口(interface)可能会有输入和输出实体。这些实体在您的主要 Web 应用程序和您的插件之间共享。在这种情况下,由于这些实体是您的界面的一部分,因此它们需要位于“通用”项目中。您可能想让您的 Controller 将这些实体直接返回到您的 View ,但是这样您就不会在 View 和插件之间有一个完美的抽象。没有完美的抽象是另一个讨论。
希望对您有所帮助!
关于c# - 如何在运行时引用mvc中的程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31096919/
C#内部访问修饰符的定义是内部:只能在包含程序集或友元程序集内访问。所以我的问题是什么是 C# 程序集?在包含程序集或 friend 程序集之内是什么意思?它是否意味着在同一个命名空间或项目中? 最佳
任何人都可以回答以下问题。我正在使用 c# 语言。 我可以将程序集调用为 .ddl 或 .exe 文件吗? 我可以将 Assembly Manifest 称为程序集吗? 程序集、元数据和程序集 lis
我正在从 Python 运行一个 .NET COM 程序集,只有当我将程序集 dll 和依赖项复制到我的 Python 根路径 c:\Python27 时才能使它正常工作。 这是不整洁的,所以我想将
作为世界上任何一名程序员,他/她一生中至少有一次,我正在尝试创建我的“革命性”,新的且唯一的操作系统。 :D 好吧,我正在使用虚拟模拟器(Oracle VM Virtual Box),为此我创建了一个
我创建了以下程序来读取 5 个数字,然后 dumpreg查看输入的数字... INCLUDE Irvine32.inc .data count = 5 scor
如何在保护模式下执行 IN 和 OUT 等受限指令? 我发现它需要足够高的特权级别(CPL)才能执行 IO 指令。我怎样才能在内核模式下运行,拥有 IO 权限或任何其他可能对我有帮助的东西? - 我希
目录 C# 程序集、模块和类型概念及关系 概述 程序集 模块 类型 程序集、模块和类型的关系 总结 引用
构建 maven assembly ,我留下了这样的东西: ${project.basedir} / LICENS
我的应用程序由几个核心程序集和几个扩展/插件程序集组成。为了让 MEF 知道插件必须提供的所有部件,即使我永远不会使用它们的任何部件,我也必须加载这些程序集。这使得应用程序需要更多时间来启动(如果我要
我对我们的构建基础结构有一个非常具体的要求,即将另一个 JAR 依赖项的一些内容复制到我的 Web 应用程序的特定子文件夹中。我们正在使用 maven-assembly-plugin,一个自然的方法是
为什么下面的指令会设置符号标志? mov al,0FEh sub al,2 据我了解,AL寄存器可以保存2^8 - 1或255。0FEh = 254(十进制)。减去 2 叶 252。这似乎是正数。 (
我以前使用过 NUnit,但已经有一段时间了,而且从来没有在这台机器上使用过。我在 Program Files 下解压了 2.4.8 版本,并且在尝试加载测试时不断收到此错误。 Could not l
我说的是一个使用 C# 进行游戏编程的小型游戏引擎。所以,我有一个嵌入单声道运行时的 C++ 应用程序(我称之为“启动器”)。我有一个用 C# 编写的程序集,它是我的游戏引擎类库。启动器按照 Embe
我对汇编相当陌生,并尝试从标准输入读取值(从 C 调用 scanf 函数)并将其打印回标准输出(使用 printf)。 .text readstr: .asciz "%d" #strin
谢谢帮助,我的问题是关于从下面的代码中收到的 ax 值? mov al,22h mov cl,0fdh imul cl 真机结果:ff9a 我的预期:00:9a(通过二进制相乘) 第一个数字是 22h
我正在开发一个汇编程序,该程序将整个文本文件读入缓冲区,然后将其显示在控制台中。它立即显示 24 行(每行的最大长度为 80,因为我使用 80 宽 * 25 高的 dossbox )然后等待用户输入,
我正在使用一个简单的程序集片段,使用 BIOS 作为引导加载程序的一部分将字符打印到屏幕上。这是引导加载程序代码。 [org 0x7c00] [bits 16] %include "a20_check
我只是想知道这段代码是什么意思: XOR EAX,EBX XOR EBX,EAX XOR EAX,EBX 最佳答案 那是 xor swapping . 在寄存器上执行它不会遇到常见的难看的失败案例。
我在新电脑上的 XNA 项目开始出现奇怪的错误。我有两个关于解决方案的项目和一个由它们使用的库。其中一个项目,一个 XNA 游戏项目,运行完美。另一个项目是 WindowsForm 和 XNA 的混合
是的,我正在努力实现类似的目标 __asm__(jmp label;); 其中 label 应替换为内存中保存的字符串值(结构体的字段)。 有没有办法做到这一点(或类似的方法可以让我跳转到运行时确定的
我是一名优秀的程序员,十分优秀!