我正在尝试使用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");
});
}
}
}
答案 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")