我在ASP.NET MVC网站上有这个代码:
x.For<AccountController>().TheDefault.Is.ConstructedBy(() => new AccountController());
此代码抛出一个警告,似乎非常自我解释但由于某些原因,当我使用“使用”方法时它似乎不起作用。我知道我做错了什么,并希望得到一些帮助。
警告是:
警告1'StructureMap.Configuration.DSL.Expressions.CreatePluginFamilyExpression.TheDefault'已过时:'“首选Use()方法”
谢谢。
答案 0 :(得分:6)
现有代码的直接等价物,但使用新API,是:
For<AccountController>().Use(() => new AccountController());
每次请求AccountController实例时,都会创建一个新的AccountController实例。
警告:如果您将一个对象实例(如RPM1984所示)而不是lambda传递给Use()方法,您将获得一个单例 - 每次返回相同的实例请求AccountController。这与您的代码之前使用Is.ConstructedBy()语法执行的操作非常不同。
答案 1 :(得分:1)
如果您查看XMLDoc以获取“使用”方法的第三个重载,它会说:
简写说 TheDefault.IsThis(@object)
因此,只需这样做:
For<AccountController>().Use(() => new AccountController());
虽然我不确定这是什么意思(当事情要求具体时注入具体内容),除非这只是一个例子,而你真的在做其他事情。
通常对于MVC控制器,你创建一个 ControllerFactory - 我没有看到需要“明确地”注入一个具体的控制器。