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);
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…