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

时间:2012-08-15 02:40:33

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

我正在玩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.
    }
}

我错过了什么?感谢。

2 个答案:

答案 0 :(得分:2)

版本 2.0 之前,Data上的ISecurityContext属性未引入。与nuget一起安装但未包含预发行版的默认值为 1.4 。哪个not have the property。确保使用正确的版本!

答案 1 :(得分: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;
    }
}