接口不包含方法的定义 [英] Interface does not contain a definition for method
问题描述
我有以下两个接口:
公共接口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);
解决方案的
动态诅咒
(评论)!动态出血。特别是,只要你涉及动态
在表达式中,在整个事情与动态执行$ C 。$ C>规则,它引入了微妙的变化成若干点
我的建议是:首先解决的值:
字符串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 theSetAuthCookie
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 adynamic
object.dynamic user = _authorizeUserCommand.Invoke(_authorizeUserParams);
解决方案The curse of
dynamic
(comments)! Dynamic bleeds. In particular, as soon as you involvedynamic
in an expression, the entire thing is performed withdynamic
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 notdynamic
.这篇关于接口不包含方法的定义的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!