接口不包含方法的定义 [英] Interface does not contain a definition for method

查看:235
本文介绍了接口不包含方法的定义的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下两个接口:

 公共接口IMembershipProvider 
{
对象登录(ILoginProviderParameters loginParameters);
无效SetAuthCookie(用户名字符串,布尔createPersistentCookie);
}

公共接口IFacebookMembershipProvider:IMembershipProvider {}

和的执行力度:

 公共类FacebookMembershipProvider:IFacebookMembershipProvider 
{
公共对象登录(ILoginProviderParameters loginParameters)
{
// Facebook登录代码是在这里
}

公共无效SetAuthCookie(用户名字符串,布尔createPersistentCookie)
{
FormsAuthentication.SetAuthCookie(用户名,createPersistentCookie);
}
}

这被注入到我的控制器,并分配到:

 私人只读IFacebookMembershipProvider _facebookMembershipProvider; 



我能够调用登录没有任何问题的方法但是当我打电话 SetAuthCookie 方法:

  _facebookMembershipProvider .SetAuthCookie(user.id,FALSE); 



我收到错误消息:




MyNamespace.UserManagement.Interfaces.IFacebookMembershipProvider'
不包含定义'SetAuthCookie




什么是我的登录方法,我不是用SetAuthCookie方法做着做着不同?



明确铸造到类型 IMembershipProvier 工作得很好:

 ((IMembershipProvider)_facebookMembershipProvider).SetAuthCookie(user.id,FALSE); 



我可能只是错过了一些东西简陋。感谢您抽空看看。



更新



在针对商标问题,第一个参数传递给 SetAuthCookie 方法来自动态对象。

 动态用户= _authorizeUserCommand.Invoke(_authorizeUserParams); 


解决方案

动态诅咒(评论)!动态出血。特别是,只要你涉及动态在表达式中,在整个事情动态执行规则,它引入了微妙的变化成若干点



我的建议是:首先解决的值:

 字符串ID = user.id; //这有一个隐式转换为字符串
_facebookMembershipProvider.SetAuthCookie(ID,FALSE);



这应该很好地工作。你也可以使用:

  _facebookMembershipProvider.SetAuthCookie((串)user.id,FALSE); 



由于显式转换应该结束了动态在参数表达的一部分,所以调用是的不可以 动态


I have the following two interfaces:

public interface IMembershipProvider
{
    object Login(ILoginProviderParameters loginParameters);
    void SetAuthCookie(string userName, bool createPersistentCookie);
}

public interface IFacebookMembershipProvider : IMembershipProvider{}

and an implimentation:

public class FacebookMembershipProvider: IFacebookMembershipProvider
{
    public object Login(ILoginProviderParameters loginParameters)
    {
        // Facebook login code is here
    }

    public void SetAuthCookie(string userName, bool createPersistentCookie)
    {
        FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
    }
}

This is being injected into my controller and assigned to:

private readonly IFacebookMembershipProvider _facebookMembershipProvider;

I'm able to call the Login method without any issue however when I call the SetAuthCookie method:

_facebookMembershipProvider.SetAuthCookie(user.id, false);

I receive the error:

MyNamespace.UserManagement.Interfaces.IFacebookMembershipProvider' does not contain a definition for 'SetAuthCookie'

What am I doing differently with the Login method that I'm not doing with the SetAuthCookie method?

Explicitly casting to the type IMembershipProvier works just fine:

((IMembershipProvider)_facebookMembershipProvider).SetAuthCookie(user.id, false);

I've probably just missed something rudimentary. Thanks for taking a look.

UPDATE

In response to Marks question, the first parameter being passed to the SetAuthCookie method comes from a dynamic object.

dynamic user = _authorizeUserCommand.Invoke(_authorizeUserParams);

解决方案

The curse of dynamic (comments)! Dynamic bleeds. In particular, as soon as you involve dynamic in an expression, the entire thing is performed with dynamic rules, which introduces subtle changes into a number of points.

My advice: resolve the value first:

string id = user.id; // this has an implicit cast to string
_facebookMembershipProvider.SetAuthCookie(id, false);

which should work fine. You could also use:

_facebookMembershipProvider.SetAuthCookie((string)user.id, false);

since the explicit cast should end the dynamic part of the expression at the argument, so the invoke is not dynamic.

这篇关于接口不包含方法的定义的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆