IContainer.IsRegistered(Type serviceType) が登録を追加するのはなぜですか?
Type serviceType = typeof (string[]);
int rc = container.ComponentRegistry.Registrations.Count();
container.IsRegistered(serviceType);
int rc2 = container.ComponentRegistry.Registrations.Count();
Assert.AreEqual(rc, rc2);
上記の動作により、次の副作用が生じる可能性があります。
public class Test
{
public Entity[] Entities { get; set; }
}
//...
var bldr = new ContainerBuilder();
bldr.RegisterModule<ArraysInjectionGuardModule>();
var container = bldr.Build();
var t = new Test();
container.InjectProperties(t);
Assert.IsNull(t.Entities);
container.InjectProperties(...);
呼び出して引数としてcontainer.IsRegistered(..)
渡すためtypeof(Entity[])
、t.Entities は空の配列で初期化されます。この動作を発見したとき、私は少し混乱しました。