在 dll 中调用 Activator.CreateInstance 来实例化位于 Asp.Net App_Code 内的类
求助,这个想法是这样的:
External.dll
IMyClass NewCreated = (IMyClass)Activator.CreateInstance(Namespace.MyClass).UnWrap();
-----------------------------------------
Asp.Net WebSite
App_Code
Namespace.MyClass.cs
Bin
External.dll
这可能吗?
我尝试过很多可能的组合,例如:
Assembly.GetCallingAssembly().CreateInstance("Namespace.MyClass")
Activator.CreateInstance(AppDomain.CurrentDomain,"Namespace","Namespace.MyClass")
Assembly.GetExecutingAssembly().CreateInstance("Namespace.MyClass")
Help, here is the idea:
External.dll
IMyClass NewCreated = (IMyClass)Activator.CreateInstance(Namespace.MyClass).UnWrap();
-----------------------------------------
Asp.Net WebSite
App_Code
Namespace.MyClass.cs
Bin
External.dll
Is that even posible?
I have tried, a lot of posible combinations, like:
Assembly.GetCallingAssembly().CreateInstance("Namespace.MyClass")
Activator.CreateInstance(AppDomain.CurrentDomain,"Namespace","Namespace.MyClass")
Assembly.GetExecutingAssembly().CreateInstance("Namespace.MyClass")
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用 BuildManager.CodeAssemblies属性列出App_Code目录中所有已编译的程序集名称。您也许能够以这种方式完成您需要的事情。
App_Code 的问题在于,所有内容都会动态编译到本质上是临时的程序集中。它带有一个临时程序集名称。这使得无法对程序集名称或路径进行硬编码。
You can use the BuildManager.CodeAssemblies property to list all the assembly names that have been compiled in the App_Code directory. You may be able to accomplish what you need that way.
The problem with App_Code is that everything gets dynamically compiled into an assembly that is by nature, temporary. This comes along with a temporary assembly name. This makes it impossible to hardcode an assembly name or path.
无需使用 BuildManager.CodeAssemblies 属性来列出所有程序集名称。而是使用:
type="Namespace.MyClass, App_Code" 来引用该类。
No need use the BuildManager.CodeAssemblies property to list all the assembly names. Instead use:
type="Namespace.MyClass, App_Code" to reference the class.