繁体   English   中英

使用StructureMap在运行时同时注入两个不同的分量

[英]Using StructureMap to inject two different componant at runtime at the same time

我有这个类可用来从不同的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>();
      });
    }
}
}

这对于第一次调用来说效果很好,它注入了名称为Assembly-name的DLL并返回它的一个对象,第二次我使用不同的assemblyname调用它不起作用并且没有返回一个对象,这很有趣它是永远不会通过这条线,如果我调试,并且如果我在没有断点的情况下运行它的话,什么也不会发生!

_prog = ObjectFactory.GetInstance<PluginProgrammer>();

知道为什么会这样吗? 知道如何解决此问题或对其进行重新设计以完成我想要的吗?

我想您应该使用命名实例,因为您希望在不同的DLL中具有不同的注册。 例如,您可以使用dllname作为实例的名称。

另请参阅: http : //geekswithblogs.net/michelotti/archive/2009/10/14/structuremap-with-named-instance-and-with-method.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM