是否存在基于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。