结构图中的默认构造函数

时间:2010-10-13 22:49:36

标签: asp.net asp.net-mvc structuremap

我在ASP.NET MVC网站上有这个代码:

x.For<AccountController>().TheDefault.Is.ConstructedBy(() => new AccountController());

此代码抛出一个警告,似乎非常自我解释但由于某些原因,当我使用“使用”方法时它似乎不起作用。我知道我做错了什么,并希望得到一些帮助。

警告是:

警告1'StructureMap.Configuration.DSL.Expressions.CreatePluginFamilyExpression.TheDefault'已过时:'“首选Use()方法”

谢谢。

2 个答案:

答案 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 - 我没有看到需要“明确地”注入一个具体的控制器。