【发布时间】:2012-03-23 09:48:40
【问题描述】:
我有以下两个接口:
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”的定义
我在使用 Login 方法时所做的与使用 SetAuthCookie 方法不同的地方是什么?
显式转换为 IMembershipProvier 类型可以正常工作:
((IMembershipProvider)_facebookMembershipProvider).SetAuthCookie(user.id, false);
我可能只是错过了一些基本的东西。感谢您的观看。
更新
针对 Marks 的问题,传递给 SetAuthCookie 方法的第一个参数来自 dynamic 对象。
dynamic user = _authorizeUserCommand.Invoke(_authorizeUserParams);
【问题讨论】:
-
+1 难以置信。没有旧的 DLL 在您的机器周围敲打?会不会是 Resharper/类似的旧缓存?
-
我在本地和我的外部服务器上遇到了同样的问题。我已删除并重新添加了对我的 UserManagement DLL 的引用。不过看起来可能是缓存问题。
-
您是否在使用
dynamic之类的东西,或者任何装饰器平台,或类似的东西?任何元编程或 IoC/DI 堆栈?基本上,看起来有些代码(通常是元编程,通过 ILGenerator)试图错误地调用该方法。它听起来不像 C# 编译器会出错。 -
IFacebookMembershipProvider接口在哪里? -
传递给 SetAuthCookie 方法的参数之一来自动态对象。
dynamic user = _authorizeUserCommand.Invoke(_authorizeUserParams);