我正在动态加载程序集,创建实现的类的实例IRegisterable
,然后使用以下缩短的代码调用注册方法:
public bool RegisterASM(string path)
{
Assembly asm = LoadAssembly(path); //helper to load assembly
if (asm != null)
{
var registerableTypes = from t in asm.GetTypes()
where t.IsClass &&
(t.GetInterface("IRegisterable") != null)
select t;
foreach (Type t in registerableTypes)
{
IRegisterable reg = (IRegisterable)asm.CreateInstance(t.FullName, true);
reg.Register(this);
}
return true;
}
else
{
Console.WriteLine("Assembly not found");
return false;
}
}
还有一个IRegisterable
类的例子:
public class Class1 : IRegisterable
{
public bool Register(IRegistrationUtilities regHandler)
{
Action<Dictionary<string, object>> actionMeathod = TestJob;
regHandler.RegisterJob(actionMeathod, "Testing", 30000, true);
Class3 c = new Class3();
actionMeathod = c.TestJob3;
regHandler.RegisterJob(actionMeathod, "Test3", 5000, true);
return true;
}
public void TestJob(Dictionary<string, object> vars)
{
Console.WriteLine("SleepStart");
Thread.Sleep(40000);
Console.WriteLine("SleepEnd");
}
}
public class Class3
{
int t = 5;
public void TestJob3(Dictionary<string, object> vars)
{
Console.WriteLine("test 3...{0}", t);
}
}
当类注册时,它会调用 中的一个方法,RegistrationHandler
然后调用该方法中的一个方法,该方法JobScheduler
将创建一个Threading.Timer
在注册TimerCallback
中actionMeathod
传递的对象。除此之外,没有其他对该IRegisterable
类的引用。
我的问题是,类是否保留在内存中,因为有对该方法的引用,还是每次调用该方法时都会重新创建该类?还是两者兼而有之?
我问的原因是Class1.Register
创建一个实例Class3
并Class3.TestJob3
作为actionMeathod
. 创建Class3
时,它会设置t=5
,用于TestJob3
. 但是当Register
方法退出时,实例Class3
被销毁,因为它是一个局部变量。但是定时调用Class3.TestJob3
仍然有t=5
,所以Class3
每次都重新创建还是持续存在?