У меня есть этот класс, чтобы использовать для получения экземпляров объектов из разных 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>();
есть идеи, почему это происходит? Любая идея, как я могу это исправить или перепроектировать, чтобы выполнить то, что я хочу?