StructureMap WithCtorArg - 缺少引用?

时间:2009-07-18 09:04:03

标签: structuremap

我正在尝试使用Structure Map。我正在使用2.5.3版本。

我已经构建了一个简单的引导strapper,但我无法编译它。我收到错误:

'StructureMap.Configuration.DSL.Expressions.CreatePluginFamilyExpression'不包含'WithCtorArg'的定义,并且没有扩展方法'WithCtorArg'接受类型'StructureMap.Configuration.DSL.Expressions.CreatePluginFamilyExpression'的第一个参数可以找到(您是否缺少using指令或程序集引用?)

我错过了什么?

我尝试编译的代码在这里:

using DomainModel.Abstract;
using DomainModel.Concrete;
using StructureMap;
using StructureMap.Pipeline; //The only WithCtorArg methods I can find are in this namespace, it didn't help.

namespace WebUI
{
public class ContainerBootstrapper
{
    public static void BootstrapStructureMap()
    {
        // Initialize the static ObjectFactory container
        ObjectFactory.Initialize(x =>
        {
            x.ForRequestedType<IProductsRepository>()
                .TheDefaultIsConcreteType<SqlProductsRepository>()
                .WithCtorArg("connectionString")
                .EqualToAppSetting("SqlConnection");
        });
    }
}
}

3 个答案:

答案 0 :(得分:1)

如果你的类有一个带有简单类型参数的非默认构造函数,比如string,int等...你可以试试这个:

x.ForRequestedType<IProductsRepository>()
 .TheDefault
 .Is
 .OfConcreteType<SqlProductsRepository>()
 .WithCtorArg("connectionString")
 .EqualToAppSetting("SqlConnection");

答案 1 :(得分:0)

我遇到过类似的问题。

如果您使用的是ForRequestedType的通用版本,则必须按照darin的建议进行操作并使用 TheDefault.Is.OfConcreteType 语法

如果你使用的是非一般版本的ForRequestedType,你可以这样做:

x.ForRequestedType(typeof (ProductsRepository))
 .TheDefaultIsConcreteType(typeof(SqlProductsRepository))
 .WithCtorArg("connectionString")
 .EqualToAppSetting("SqlConnection");

答案 2 :(得分:0)

我正在将旧项目升级到StructureMap 3.1.6.186,无法解析WithCtorArg()。 从这里的文档:http://structuremap.github.io/registration/inline-dependencies/我现在使用以下内容:

x.For<ProductsRepository>()
 .Use<SqlProductsRepository>() 
 .Ctor<string>("connectionString").Is("SqlConnection")