接口不包含方法的定义

我有以下两个接口:

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

和一个恭维:

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

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

 private readonly IFacebookMembershipProvider _facebookMembershipProvider; 

我可以在没有任何问题的情况下调用Login方法,但是当我调用SetAuthCookie方法时:

 _facebookMembershipProvider.SetAuthCookie(user.id, false); 

我收到错误:

MyNamespace.UserManagement.Interfaces.IFacebookMembershipProvider’不包含’SetAuthCookie’的定义

我对使用SetAuthCookie方法没有做的Login方法做了哪些不同的操作?

明确地转换为类型IMembershipProvier工作得很好:

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

我可能只是错过了一些简陋的东西。 谢谢参观。

UPDATE

在回答Marks问题时,传递给SetAuthCookie方法的第一个参数来自dynamic对象。

 dynamic user = _authorizeUserCommand.Invoke(_authorizeUserParams); 

dynamic的诅咒(评论)! 动态出血。 特别是,只要在表达式中包含dynamic ,就会使用dynamic规则执行整个操作,这会将细微的更改引入到许多点中。

我的建议:先解决价值:

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

这应该工作正常。 你也可以使用:

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

因为显式转换应该在参数处结束表达式的dynamic部分,所以调用不是 dynamic