使 StructureMap 可配置
Making StructureMap configurable
StructureMap,从3.0版本开始,不再支持XML配置。也就是说,我无法再从配置中告诉 StructureMap 哪个 class 满足哪个接口。相反,我必须在代码本身中提及这一点。这限制了我配置代码的能力 而无需重新编译 代码。
有没有办法使其可配置而不需要重新编译解决方案? Unity supports that natively.
如果没有办法做到这一点,为什么 StructureMap 删除了那个好功能?
XML 配置被认为是过时的,毫无疑问最终将从所有 DI 容器中删除支持。事实上,通过在代码中配置强类型比脆弱的 XML 结构和类型字符串更容易维护。
如果您需要在不重新编译的情况下稍作改动,您始终可以使用 .config
文件向配置添加条件行为(在应用程序的 composition root 中)。
var option = System.Configuration.ConfigurationManager.AppSettings["mySetting"];
if ("option1".Equals(option))
{
container.For<ISomething>().Use<Something>();
}
else if ("option2".Equals(option))
{
container.For<ISomething>().Use<SomethingElse>();
}
else
{
container.For<ISomething>().Use<DefaultSomething>();
}
所以你仍然可以改变周围的东西,但是没有脆弱的难以维护的 XML 配置,你不会意识到直到运行时才会失败。
StructureMap,从3.0版本开始,不再支持XML配置。也就是说,我无法再从配置中告诉 StructureMap 哪个 class 满足哪个接口。相反,我必须在代码本身中提及这一点。这限制了我配置代码的能力 而无需重新编译 代码。
有没有办法使其可配置而不需要重新编译解决方案? Unity supports that natively.
如果没有办法做到这一点,为什么 StructureMap 删除了那个好功能?
XML 配置被认为是过时的,毫无疑问最终将从所有 DI 容器中删除支持。事实上,通过在代码中配置强类型比脆弱的 XML 结构和类型字符串更容易维护。
如果您需要在不重新编译的情况下稍作改动,您始终可以使用 .config
文件向配置添加条件行为(在应用程序的 composition root 中)。
var option = System.Configuration.ConfigurationManager.AppSettings["mySetting"];
if ("option1".Equals(option))
{
container.For<ISomething>().Use<Something>();
}
else if ("option2".Equals(option))
{
container.For<ISomething>().Use<SomethingElse>();
}
else
{
container.For<ISomething>().Use<DefaultSomething>();
}
所以你仍然可以改变周围的东西,但是没有脆弱的难以维护的 XML 配置,你不会意识到直到运行时才会失败。