我对结构图仍然很新,所以我无法理解为什么这不起作用。我正在向存储库注入一个“连接字符串”,并且我一直从结构图中得到以下错误:
StructureMap异常代码:205 InstanceKey缺少请求的实例属性“purchaseOrdersFilePath”“a04b4f71-4171-4e9f-b98d-170fc9ee005f”
在旁注中,连接字符串是引号,因为我正在使用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"));
}
我做错了什么?
感谢您的帮助。
答案 0 :(得分: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"));
当我应该做的是这样的时候:
ioc.Configure(r => r
.For<IPurchaseOrderRepository>()
.Use<PurchaseOrderRepository>()
.Ctor<string>().Is(@"C:\Users\sromero\Documents\Visual Studio 2010\Projects\DIDemo\SupportFiles\POS.xml"));
答案 1 :(得分:2)
尝试:
.Ctor<string>("purchaseOrdersFilePath").Is(@"C:\Users\sromero\Documents\Visual Studio 2010\Projects\DIDemo\SupportFiles\POS.xml"));