1

如何传递将在另一个类中定义为此类表达式中的参数的未知类型。不知道如何调用表达式。并且不知道为什么它不记得括号之间的类型以及解决方案是什么。

.AddCallHandler<asp.CallHandlerType>

编码 :

 foreach (IAspect asp in Policy.Aspects)
 {
  //Type callHandlerType = asp.CallHandlerType;
  policy.AddMatchingRule(ruleLog)
    .AddCallHandler<asp.CallHandlerType>(new 
      ContainerControlledLifetimeManager());
 }

据说“ asp”的类型或命名空间不存在。我也尝试过更早地定义它并传递它“ callHandlerType”,这又是一个类似的问题。

foreach asp 中的 CallHandler 类型会有所不同,一种是 RestaurantCallHandler,另一种可能是 MagicCallHandler。这些是在方面定义的。

接口的方法定义:

public interface IAspect
{
   Type CallHandlerType { get; set; }
   // e.g it can be "MagicCallHandler : ICallHandler
}
4

1 回答 1

2

通常,如果您在编译时不知道类型,则可以使用反射在运行时创建泛型类型。

但是,在这种情况下,Unity 提供了非泛型方法重载(对于大多数功能),它们接受System.Type类型参数而不是泛型类型参数。这允许您在运行时指定类型或使用未绑定的泛型类型。

在您的情况下,您可以使用此代码来注册您的呼叫处理程序,而无需反射:

foreach (IAspect asp in Policy.Aspects)
{
    policy.AddMatchingRule(ruleLog)
      .AddCallHandler(asp.CallHandlerType, 
        new ContainerControlledLifetimeManager());
}
于 2013-06-30T14:36:32.943 回答