我有这个类用于从不同的DLL获取对象的实例,具体取决于名称为dll的字符串。
public class PluginFactory
{
private static volatile PluginFactory Factory;
private static object syncRoot = new Object();
private PluginFactory()
{
}
public static PluginFactory Instance
{
get
{
if (Factory == null)
{
lock (syncRoot)
{
if (Factory == null)
{
Factory = new PluginFactory();
}
}
}
return Factory;
}
}
public IPlugableInterface GetPlugin(string assemblyName)
{
ObjectFactory.Initialize(x => x.AddRegistry(new PluginRegistery(assemblyName)));
_prog = ObjectFactory.GetInstance<PluginProgrammer>();
return _prog.Plugin;
}
PluginProgrammer _prog;
[Pluggable("Default")]
[PluginFamily("Default")]
internal class PluginProgrammer
{
public readonly IPlugableInterface Plugin;
public PluginProgrammer(IPlugableInterface Plugin)
{
this.Plugin = Plugin;
}
}
internal class PluginRegistery : Registry
{
public PluginRegistery(string assembly)
{
Scan(
scanner =>
{
scanner.AssembliesFromApplicationBaseDirectory(x => x.ManifestModule.Name == assembly);
scanner.AddAllTypesOf<IPlugableInterface>();
});
}
}
}
这适用于第一次调用,它注入DLL,其名称为程序集名称并返回它的对象,第二次用不同的程序集名称调用它不起作用并且不返回对象,有趣的是,如果我调试它永远不会通过这一行,如果我在没有断点的情况下运行它就不会发生任何事情!
_prog = ObjectFactory.GetInstance<PluginProgrammer>();
知道为什么会这样吗?任何想法如何解决这个问题或重新设计它以实现我想要的目标?
答案 0 :(得分:0)
我认为您应该使用命名实例,因为您希望在不同的DLL中具有不同的注册。例如,您可以使用dllname作为实例的名称。