我用一个非常丑陋(但非常优雅)的解决方案自己解决了这个问题。
我创建了一个TinyIoCContainer的另一个内部实例,并通过给它一个工厂的形式将我的所有类型注册到实际的TinyIoCContainer.Current中:
var container = TinyIoCContainer.Current;
var internalIoC = new TinyIoCContainer();
Dictionary<Type, Object> instances = new Dictionary<Type, Object>();
...
Func<TinyIoCContainer, NamedParameterOverloads, Object> factory = (TinyIoCContainer c, NamedParameterOverloads o) =>
{
if (instances.ContainsKey(implementationType) == false)
{
// Create the instance only once, and save it to our dictionary.
// This way we can get singleton implementations of multi-registered types.
instances.Add(implementationType, internalIoC.Resolve(implementationType));
}
return instances[implementationType];
};
container.Register(registerType, factory, implementationType.FullName);
我确信这个解决方案会有一些警告,但我也确信我能够为他们找到一个可行的解决方案,就像现在的情况一样。