gpt4 book ai didi

c# - 接口(interface)不包含方法的定义

转载 作者:行者123 更新时间:2023-11-30 15:39:57 25 4
gpt4 key购买 nike

我有以下两个接口(interface):

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

这被注入(inject)我的 Controller 并分配给:

private readonly IFacebookMembershipProvider _facebookMembershipProvider;

我可以毫无问题地调用 Login 方法,但是当我调用 SetAuthCookie 方法时:

_facebookMembershipProvider.SetAuthCookie(user.id, false);

我收到错误:

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

我使用 Login 方法与使用 SetAuthCookie 方法没有做的事情有何不同?

显式转换为 IMembershipProvier 类型工作得很好:

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

我可能只是错过了一些基本的东西。感谢您查看。

更新

作为对 Marks 问题的回应,传递给 SetAuthCookie 方法的第一个参数来自 dynamic 对象。

dynamic user = _authorizeUserCommand.Invoke(_authorizeUserParams);

最佳答案

dynamic 的诅咒(评论)!动态出血。特别是,一旦您在表达式中涉及 dynamic整个事情 就会使用 dynamic 规则执行,这会在数字中引入细微的变化点数。

我的建议:首先解决值(value):

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

应该可以正常工作。您还可以使用:

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

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

关于c# - 接口(interface)不包含方法的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9837002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com