我建议实施
NullObject pattern
AuthorizeAttribute
做好它的工作,不要把Autofac和constructor与原始空值混淆。我看不到你的全部代码,所以下面的例子只是这个想法的一个说明。假设我们扩展
EnterpriseUser
public class EnterpriseUser
{
/// <summary>
/// Always true for real user
/// </summary>
public virtual bool IsAuthentificated => true;
public static EnterpriseUser Create(string userLinkCode, string partnerLinkCode)
{
if (string.IsNullOrEmpty(userLinkCode) ||
string.IsNullOrEmpty(partnerLinkCode))
{
return new DummyEnterpriseUser();
}
// create true user here with usin link codes
return new EnterpriseUser(userLinkCode, partnerLinkCode);
}
// Some usefull code here
}
/// <summary>
/// NullObject implementation for <see cref="EnterpriseUser"/>
/// </summary>
public class DummyEnterpriseUser : EnterpriseUser
{
/// <summary>
/// Always false for dummy user
/// </summary>
public override bool IsAuthentificated => false;
public DummyEnterpriseUser()
{
}
}
IsAuthentificated
为了以防万一,你可能不需要它。我还假设你的扩展方法
GetUserLinkCode
退货
null
如果是空的索赔。当然,最终的实现将取决于您的代码。