2011-08-03 24 views
0

我有這個類用於從不同的DLL獲取對象的實例,具體取決於具有dll名稱的字符串。使用StructureMap在運行時同時注入兩個不同的組件

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>(); 
     }); 
    } 
} 
} 

也能正常工作的第一個電話,它注入到有其名的AssemblyName的DLL,並返回一個對象,我第二次用不同的AssemblyName它不工作,犯規叫它返回一個對象,有趣的是它永遠不會通過這條線,如果我調試,如果我沒有斷點運行它沒有發生任何事情!

_prog = ObjectFactory.GetInstance<PluginProgrammer>(); 

任何想法爲什麼會發生這種情況?任何想法如何解決這個問題或重新設計它來實現我想要的?

回答

相關問題