0

我正在尝试开始使用结构图。我使用的是 2.5.3 版。

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

“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");
        });
    }
}
}
4

3 回答 3

1

如果您的类有一个带有简单类型参数(如字符串、int 等)的非默认构造函数……您可以试试这个:

x.ForRequestedType<IProductsRepository>()
 .TheDefault
 .Is
 .OfConcreteType<SqlProductsRepository>()
 .WithCtorArg("connectionString")
 .EqualToAppSetting("SqlConnection");
于 2009-07-18T09:08:45.917 回答
0

我遇到了类似的问题。

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

如果您使用的是 ForRequestedType 的非通用版本,您可以这样做:

x.ForRequestedType(typeof (ProductsRepository))
 .TheDefaultIsConcreteType(typeof(SqlProductsRepository))
 .WithCtorArg("connectionString")
 .EqualToAppSetting("SqlConnection");
于 2009-07-25T05:37:44.003 回答
0

我正在将一个旧项目升级到 StructureMap 3.1.6.186 并且无法让 WithCtorArg() 解决。从这里的文档:http: //structuremap.github.io/registration/inline-dependencies/我现在使用类似以下的东西:

x.For<ProductsRepository>()
 .Use<SqlProductsRepository>() 
 .Ctor<string>("connectionString").Is("SqlConnection")
于 2015-07-16T09:22:16.310 回答