我想在某个类构造函数执行之前自动执行一些代码(加载一些类需要的externall),所有这些都在C#,.NET 2.0中
编辑:
public class MyClass
{
ThisTypeFromExternalAssembly variable;
}
我真正需要的是将程序集加载器以某种方式“附加”到MyClass,以便在需要时加载外部程序集。这必须在构造函数之前发生,但我不想在构造Init()
对象之前调用一些MyClass()
答案 0 :(得分:6)
您可以为该类使用静态初始化程序:
static ClassName( )
{
}
这将在构造任何ClassName实例之前调用。
鉴于你会做的更新:
public class MyClass
{
ThisTypeFromExternalAssembly variable;
static MyClass( )
{
InitialiseExternalLibrary( );
}
public MyClass( )
{
variable = new ThisTypeFromExternalAssembly( );
}
}
答案 1 :(得分:4)
您可以使用static constructor吗?
class SimpleClass
{
// Static constructor
static SimpleClass()
{
//...
}
}
来自MSDN文章:
使用静态构造函数 初始化任何静态数据,或者 执行需要的特定操作 仅执行一次。它被称为 自动在第一个之前 实例已创建或任何静态 成员被引用。
答案 2 :(得分:3)
如果要加载程序集,听起来你只想做一次,在这种情况下静态构造函数可能是合适的:
public class Foo
{
static Foo()
{
// Load assembly here
}
}
请注意,如果此操作失败(抛出异常),则AppDomain
中的类型将无法使用。
为什么你不仅仅使用普通类型分辨率加载程序集?当您需要使用其中的一部分时,是否不会自动加载程序集?你能提供一些关于你想要解决的问题的更多细节吗?
答案 3 :(得分:0)
您可能希望使用像postharp这样的aop框架,它允许通过使用属性来干扰函数调用。
http://www.sharpcrafters.com/solutions/monitoring#tracing
http://www.codeproject.com/KB/cs/ps-custom-attributes-1.aspx