如何使用Ninject实现参数化单例

时间:2019-01-04 13:43:23

标签: c# singleton ninject factory

是否存在基于Ninject的方法来实现这样的工厂:

    public class AspectProviderFactory  
{
    private readonly Dictionary<string, IAspectProvider> Instances = new Dictionary<string, IAspectProvider>();

    public IAspectProvider Get(string aspectName)
    {
        if (!Instances.ContainsKey(aspectName)) 
            Instances[aspectName] = new AspectProvider(aspectName);
        return Instances[aspectName];
    }
}

如果每个字符串参数都需要每个单例实例。

Bind<IAspectProvider>().ToConstructor(ctorArg => new AspectProvider(ctorArg.Inject<string>())).InSingletonScope();

var instance1 = Kernel.Get<IAspectParameter>(new ConstructorArgument("aspectName",
                "aspect1");
var instance2 = Kernel.Get<IAspectParameter>(new ConstructorArgument("aspectName",
                "aspect2");

不能解决问题,因为按类型而不是按字符串参数带来实例,所以在这里instance1 == instance2。

0 个答案:

没有答案