c# - CaSTLe windsor 添加条件依赖

标签 c# castle-windsor conditional castle

我有 2 个相同接口(interface)的实现,如果用户已登录,我想使用实现 1,如果用户未登录,我想使用实现 2。我如何使用 caSTLe windsor 配置它?

最佳答案

您可以添加 handler selector ,这将能够根据例如,在可用的实现之间进行选择。是否设置了 Thread.CurrentPrincipal(如果我没记错的话,在 ASP.NET/MVC 中设置了 HttpContext.Current.Request.IsAuthenticated)。

处理程序选择器可能看起来像这样:

public class MyAuthHandlerSelector : IHandlerSelector
{
    public bool HasOpinionAbout(string key, Type service)
    {
        return service == typeof(ITheServiceICareAbout);
    }

    public IHandler SelectHandler(string key, Type service, IHandler[] handlers)
    {
        return IsAuthenticated 
            ? FindHandlerForAuthenticatedUser(handlers)
            : FindGuestHandler(handlers);
    }

    bool IsAuthenticated
    {
        get { return Thread.CurrentPrincipal != null; } 
    }
    // ....
}

处理程序选择器的唯一缺点是它们不是从容器中提取出来的——也就是说,它们是在注册时作为一个实例添加到容器中的,所以它们不需要注入(inject)依赖项、管理生活方式等。 ,但有一些方法可以缓解这种情况 - 看看 F.T.Windsor如果您有兴趣了解如何做到这一点。

关于c# - CaSTLe windsor 添加条件依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7502026/

相关文章:

c# - 如何将已解析的实例从控制反转传递给应用程序中的类?

asp.net-mvc-3 - 带有 MVC 和自定义 MembershipProvider 的 DI

c - 所有条件都相等的 If 语句

c# - 过滤命名空间中除当前程序集之外的所有程序集

c# - HttpWebRequest.GetResponse() 返回错误 500 Internal Server Error

c# - 使用静态记录器、静态帮助程序类进行依赖注入(inject)

c# - 使用 C# 将图像上传到 .NET 服务器

xcode - 如何在 Storyboard 中应用基于条件的自定义转场

PHP 条件返回语句?

c# - 在序列化之前将 string[] 转换为字符串