目前没有办法,也没有计划这样的功能。你可以创建一个问题来请求这个。
但我在徘徊为什么需要它。因为单例提供了只创建一次的保证,因此您不必担心或检查是否有双重创建。
是为了别的吗?
更新
好的,在 DryIoc 中你可以注册一个“装饰器”来控制和提供关于装饰器创建的信息,这里有更多关于装饰器的信息:
[TestFixture]
public class SO_IsInstantiatedViaDecorator
{
[Test]
public void Test()
{
var c = new Container();
c.Register<IService, X>(Reuse.Singleton);
c.Register<XProvider>(Reuse.Singleton);
c.Register<IService>(
Made.Of(_ => ServiceInfo.Of<XProvider>(), p => p.Create(Arg.Of<Func<IService>>())),
Reuse.Singleton,
Setup.Decorator);
c.Register<A>();
var x = c.Resolve<XProvider>();
Assert.IsFalse(x.IsCreated);
c.Resolve<A>();
Assert.IsTrue(x.IsCreated);
}
public interface IService { }
public class X : IService { }
public class A
{
public A(IService service) { }
}
public class XProvider
{
public bool IsCreated { get; private set; }
public IService Create(Func<IService> factory)
{
IsCreated = true;
return factory();
}
}
}
这个例子也说明了 DryIoc 装饰器和工厂方法的组合有多么强大。