接口不包含方法的定义
我有以下两个接口:
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
。