C#访问接口上的动态属性

C#访问接口上的动态属性,c#,c#-4.0,dynamic,fluent-security,C#,C# 4.0,Dynamic,Fluent Security,我正在使用用于asp.net mvc的FluentSecurity库。此库公开的接口之一是ISecurityContext,如下所示: public interface ISecurityContext { dynamic Data { get; } bool CurrenUserAuthenticated(); IEnumerable<object> CurrenUserRoles(); } 我错过了什么?谢谢。以下内容如预期运行,我是否与您有什么不同之处

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

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

我错过了什么?谢谢。

以下内容如预期运行,我是否与您有什么不同之处

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;
    }
}

ISecurityContext
上的
Data
属性直到版本2.0才引入。与nuget一起安装而不包括预发行版的默认值为1.4。是的。确保您使用的是正确的版本

@Abhinav-是的,你是对的,我做了一些测试并发布了一些不是基于猜测的东西(因此你的评论现在可能看起来很奇怪)@Hogan你的代码工作正常,但问题是另一个:接口是由外部库提供的。@Fuex,我不知道这有什么关系。@Hogan首先我认为它和你一样,但是阅读msdn的文档,这似乎很重要。@Hogan令人惊讶的是,这确实很重要。我不明白为什么。如果我在FluentSecurity的源代码中编写相同的类,它就可以工作。但是,在asp.net mvc项目中引用FluentSecurity.dll时,同样的事情不起作用。我不明白为什么会有这种限制。实际的例外情况是什么,我认为这个问题与ISecurityContext的实际实现有关,因为数据返回的是什么,而不是调用数据本身,因为返回类型是否是动态的,数据本身是一个静态属性。@jbtule请参阅我对Hogan回答的评论您的评论中没有异常。但它确实提到了在使用源代码而不是dll时工作。这是编译器错误吗?您是否没有使用nuget的1.4 dll,因为在2.0之前,ISecurityContext@jbtule上没有数据属性谢谢。我使用的是1.4参考,而我下载的源代码是2.0。我觉得很傻:)不管怎样..如果你能把你的评论写下来作为答案,我可以把它记下来作为答案。
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;
    }
}