如何在Structuremap 4.4中设置覆盖注册
本文关键字:设置 覆盖 注册 Structuremap | 更新日期: 2023-09-27 18:13:40
所以我有一个容器,我在其中添加了一个注册表,定义了一个类的默认类型。
TestRegistry : Registry{
For<Foo>.Use<Foo>();
}
此注册表在应用程序初始化期间在web服务开始时添加。在添加了用于应用程序的所有注册表之后,我需要直接覆盖Foo
类的注册。所以:
Container.Instance.Configure(x =>
{
x.AddRegistry<TestRegistry>();
var fooInstance = new Foo();
x.For<Foo>.Use(fooInstance);
}
当我去检索这个实例从我的容器
var fromContainer = Container.Instance.GetInstance<Foo>();
我现在得到了null
。如果我使用get所有实例:
var fromContainer = Container.Instance.GetAllInstances<Foo>();
得到两个结果。每次注册一个。这是有道理的。
但是,如果我试图在第二次注册期间清除注册:
Container.Instance.Configure(x =>
{
x.AddRegistry<TestRegistry>();
var fooInstance = new Foo();
x.For<Foo>.ClearAll().Use(fooInstance);
}
var fromContainer = Container.Instance.GetInstance<Foo>();
仍然返回null
。我好像漏掉了什么。我希望这将清除Foo
的所有注册并使用我最后注册的实例。
任何帮助都会很感激。提前感谢!
我找到了答案。在配置方法完成之前,看起来只有Container.Instance
实际上不包含定义。这意味着为了覆盖实现,您需要使用覆盖第二次调用Container.Instance.Configure()
。一旦我这样做了,它就开始像预期的那样工作了。