我有一个特殊情况,一个对象需要在每个线程的基础上成为一个单例。所以我想使用一个Factory
类的静态工厂方法来实例化这些实例。为了确保使用工厂类(因为它按线程缓存),需要保护构造函数。
所以假设我有这样的课程。
public class XXXX : Model {
protected XXXX() {
}
}
我想使用这样的工厂类。
public class Factory {
private static Dictionary<int,Model> _singletons;
public static T Instance() where T : Model {
int thread = Thread.CurrentThread.ManagedThreadId;
if(!_singletons.ContainsKey(thread))
{
_singletons[thread] = new T();
}
return (T)_singletons[thread];
}
}
然后稍后我可以像这样获得对每个单例的引用,并且每个线程的引用都是唯一的。
XXXX m = Factory.Instance<XXXX>();
我怎样才能做到这一点,以便Factory
该类有权创建实例。一个问题是类将在其他将在运行时加载的 DLL 中定义。我所知道的是它们派生自Model
并具有protected/private
构造函数。