请有人可以告诉我如何使用在运行时传递的参数注册类
public interface ITabContentSending
{
TabType TheTabType { get; set; }
int? OrderId { get; set; }
}
public class TabContentSending : ITabContentSending
{
public TabType TheTabType { get; set; }
public int? OrderId { get; set; }
public TabContentSending(int orderId)
{
TheTabType = TabType.Table;
OrderId = orderId;
}
}
我目前的努力(显然是错误的)
builder.RegisterType<TabContentSending>()
.As<ITabContentSending>()
.WithParameter(new ResolvedParameter(
(p, c) => p.ParameterType == typeof(int) && p.Name == "orderId",
(p, c) => "OrderId"));
运行时结果错误:
输入字符串的格式不正确。 调用构造函数&#39; Void .ctor(Int32)&#39;时抛出异常。在类型&#39; TabContentSending&#39;。 ---&GT;输入字符串的格式不正确。 (详见内部异常。)
答案 0 :(得分:3)
如果要在类型注册期间传递参数值(如在代码示例中),可以使用各种可能性:命名,类型化和已解析参数。如果你想继续使用已解决的一个,就像在你的例子中一样,ResolvedParameter
对象的第二个参数应该是一个lamba表达式,它返回你在解析实例时要使用的值。因此,因为orderId
是整数类型,所以它应该如下所示:
builder.RegisterType<TabContentSending>()
.As<ITabContentSending>()
.WithParameter(new ResolvedParameter(
(p, c) => p.ParameterType == typeof(int) && p.Name == "orderId",
(p, c) => 1)); // the value of "1" would be injected
在您的示例中,您尝试将字符串值“OrderId”注入整数orderId
参数。
但是,如果你想在运行时传递orderId
的值,你应该像往常一样注册你的类型,没有.WithParameter
部分,然后,而不是注入ITabContentSending tabContentSending
,你应该注入Func<int, ITabContentSending> tabContentSendingFunc
。这样做,而不是注入实例,您注入一个委托,它允许您创建ITabContentSending
的实例并传递orderId
参数的正确值:
var orderId = 1;
var instance = tabContentSendingFunc(orderId);