【问题标题】:C# Accessing dynamic property on interfaceC#访问接口上的动态属性
【发布时间】:2012-08-15 02:40:32
【问题描述】:

我正在玩用于 asp.net mvc 的 FluentSecurity 库。该库公开的接口之一是ISecurityContext,如下所示:

public interface ISecurityContext
{
    dynamic Data { get; }
    bool CurrenUserAuthenticated();
    IEnumerable<object> CurrenUserRoles();
}

当我尝试访问“数据”属性(如下所示)时,它不可用。尽管其他两种方法似乎可以访问。

public class ExperimentalPolicy : ISecurityPolicy
{
    public PolicyResult Enforce(ISecurityContext context)
    {
        dynamic data = context.Data; // Data property is not accessible.
    }
}

我错过了什么?谢谢。

【问题讨论】:

  • 实际异常是什么,我认为这个问题与 ISecurityContext 的实际实现有关,因为 Data 返回的是什么而不是调用数据本身,因为返回类型是否是动态的, 数据本身是一个静态属性。
  • @jbtule 查看我对霍根回答的评论
  • 您的评论中没有例外。但它确实提到了当你使用源而不是 dll 时工作。这是编译器错误吗?您是否没有使用 nuget 的 1.4 dll,因为在 2.0 之前,ISecurityContext github.com/kristofferahl/FluentSecurity/blob/… 上没有 Data 属性
  • @jbtule 谢谢。我使用的是 1.4 参考,而我下载的源代码是 2.0。我觉得很傻 :) 无论如何..如果您可以将您的评论作为答案,我可以将其标记为一个。

标签: c# c#-4.0 dynamic fluent-security


【解决方案1】:

ISecurityContext 上的 Data 属性直到 2.0 版本才引入。使用 nuget 安装但不包含预发行版的默认值为 1.4not have the property。确保您使用的是正确的版本!

【讨论】:

    【解决方案2】:

    以下按预期运行,有什么我做的和你不一样的吗?

    void Main()
    {
      ATest t = new ATest();
      Experiment z = new Experiment();
    
      z.TestTest(t);
    }
    
    public class ATest : ITest
    {
      public dynamic Data {get; set;}
    
      public ATest()
      {
         Data = new { Test = "This is a string" };
      }
    }
    
    // Define other methods and classes here
    public interface ITest
    {
      dynamic Data { get; }
    }
    
    public class Experiment
    {
        public int TestTest(ITest context)
        {
           dynamic data = context.Data; 
    
           Console.WriteLine(data.Test);
    
           return 0;
        }
    }
    

    【讨论】:

    • @Abhinav - 是的,你是对的,我做了一些测试并发布了一些不是基于猜测的东西(所以你的评论现在可能看起来很奇怪)
    • @Hogan 您的代码工作正常,但问题是另一个问题:接口由外部库提供。
    • @Fuex,我不知道这有什么关系。
    • @Hogan 首先我认为它喜欢你,但阅读 msdn 的文档似乎这很重要。
    • @Hogan 令人惊讶的是,这确实很重要。我很困惑为什么。如果我在 FluentSecurity 的源代码中编写相同的类,它就可以工作。但是在 asp.net mvc 项目中引用 FluentSecurity.dll 时,同样的事情不起作用。我很困惑为什么会有这种限制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多