使用StructureMap注入连接字符串不起作用

Ser*_*ero 2 c# structuremap dependency-injection

我对结构图仍然很新,所以我无法理解为什么这不起作用.我正在向存储库注入"连接字符串",并且我不断从结构图中收到以下错误:

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

在旁注中,连接字符串是引号,因为我正在使用linq到xml,因此"连接字符串"实际上是文件的路径.我正在添加它,以防万一它可能与问题有关.

我的代码如下:

public class PurchaseOrderRepository : IPurchaseOrderRepository
{
    private readonly string PurchaseOrdersFilePath;

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

        PurchaseOrdersFilePath = purchaseOrdersFilePath;
    }
 }
Run Code Online (Sandbox Code Playgroud)

在我的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"));
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

谢谢你的帮助.

Ser*_*ero 6

事实证明我正在配置两次相同的组件(我没有反映问题中的示例代码),所以我在做的是:

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"));
Run Code Online (Sandbox Code Playgroud)

当我应该做的是这样的:

ioc.Configure(r => r
                .For<IPurchaseOrderRepository>()
                .Use<PurchaseOrderRepository>()
                .Ctor<string>().Is(@"C:\Users\sromero\Documents\Visual Studio 2010\Projects\DIDemo\SupportFiles\POS.xml"));
Run Code Online (Sandbox Code Playgroud)