C# 注入StructureMap不工作的连接字符串

C# 注入StructureMap不工作的连接字符串,c#,dependency-injection,structuremap,C#,Dependency Injection,Structuremap,我对结构图还是很陌生,所以我不明白为什么这不起作用。我正在向存储库注入一个“连接字符串”,并不断从结构映射中得到以下错误: StructureMap异常代码:205 InstanceKey“a04b4f71-4171-4e9f-b98d-170fc9ee005f”缺少请求的实例属性“purchaseOrdersFilePath” 另一方面,连接字符串在引号中,因为我也在使用linq to xml,所以“连接字符串”实际上是指向文件的路径。我加上这个只是为了防止它可能与这个问题有关 我的代码如下:

我对结构图还是很陌生,所以我不明白为什么这不起作用。我正在向存储库注入一个“连接字符串”,并不断从结构映射中得到以下错误:

StructureMap异常代码:205 InstanceKey“a04b4f71-4171-4e9f-b98d-170fc9ee005f”缺少请求的实例属性“purchaseOrdersFilePath”

另一方面,连接字符串在引号中,因为我也在使用linq to xml,所以“连接字符串”实际上是指向文件的路径。我加上这个只是为了防止它可能与这个问题有关

我的代码如下:

public class PurchaseOrderRepository : IPurchaseOrderRepository
{
    private readonly string PurchaseOrdersFilePath;

    public PurchaseOrderRepository(string purchaseOrdersFilePath)
    {
        if (string.IsNullOrWhiteSpace(purchaseOrdersFilePath)) throw new ArgumentNullException("purchaseOrdersFilePath");

        PurchaseOrdersFilePath = purchaseOrdersFilePath;
    }
 }
在Global.asax文件中,我有以下配置语句:

private void RegisterControllerFactory()
{
    var ioc = new Container();

    var controllerFactory = new IocControllerFactory(ioc);
    ControllerBuilder.Current.SetControllerFactory(controllerFactory);

    ioc.Configure(r => r.Scan(x =>
    {
        x.AssemblyContainingType<HomeController>();
        x.AddAllTypesOf<IController>();
        x.Include(t => typeof(IController).IsAssignableFrom(t));
    }));

    ioc.Configure(r => r
        .ForConcreteType<PurchaseOrderRepository>()
        .Configure.Ctor<string>().Is(@"C:\Users\sromero\Documents\Visual Studio 2010\Projects\DIDemo\SupportFiles\POS.xml"));
}
private void RegisterControllerFactory()
{
var ioc=新容器();
var controllerFactory=新IocControllerFactory(ioc);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
配置(r=>r.Scan(x=>
{
x、 AssemblyContainingType();
x、 AddAllTypesOf();
x、 包括(t=>typeof(IController).IsAssignableFrom(t));
}));
配置(r=>r
.ForConcreteType()
.Configure.Ctor()是(@“C:\Users\sromero\Documents\Visual Studio 2010\Projects\DIDemo\SupportFiles\POS.xml”);
}
我做错了什么

谢谢你的帮助。

试试:

.Ctor<string>("purchaseOrdersFilePath").Is(@"C:\Users\sromero\Documents\Visual Studio 2010\Projects\DIDemo\SupportFiles\POS.xml"));
.Ctor(“purchaseOrdersFilePath”).Is(@“C:\Users\sromero\Documents\Visual Studio 2010\Projects\DIDemo\SupportFiles\POS.xml”);

原来我配置了两次相同的组件(我没有在问题中的示例代码中反映),所以我所做的是:

ioc.Configure(r => r
                .For<IPurchaseOrderRepository>()
                .Use<PurchaseOrderRepository>());

    ioc.Configure(r => r
            .ForConcreteType<PurchaseOrderRepository>()
            .Configure.Ctor<string>().Is(@"C:\Users\sromero\Documents\Visual Studio 2010\Projects\DIDemo\SupportFiles\POS.xml"));
ioc.Configure(r=>r
.对于()
.Use());
配置(r=>r
.ForConcreteType()
.Configure.Ctor()是(@“C:\Users\sromero\Documents\Visual Studio 2010\Projects\DIDemo\SupportFiles\POS.xml”);
我应该做的是:

ioc.Configure(r => r
                .For<IPurchaseOrderRepository>()
                .Use<PurchaseOrderRepository>()
                .Ctor<string>().Is(@"C:\Users\sromero\Documents\Visual Studio 2010\Projects\DIDemo\SupportFiles\POS.xml"));
ioc.Configure(r=>r
.对于()
.Use()
.Ctor()是(@“C:\Users\sromero\Documents\Visual Studio 2010\Projects\DIDemo\SupportFiles\POS.xml”);

谢谢,但它不起作用。我还是犯了同样的错误。