动态依赖注入 Web Api

Dynamic Dependency Injection Web Api

我正在尝试使用动态 DI。我有我的配置:

container.RegisterType<IUserAdditionalData, UserAdditionalDataRepository>(
    new HierarchicalLifetimeManager());
container.RegisterType<IPermission, PermissionRepository>(
    new HierarchicalLifetimeManager());         

config.DependencyResolver = new UnityResolver.UnityResolver(container);

至此,一切都OK了。但我需要动态设置我的 class 。我有两个 class,PermissionRepository 和 PermissionRepositoryTwo,它们从 IPermission 实现,所以我想在 PermissionRepository 和 PermissionRepositoryTwo 之间切换。我读过我可以使用策略模式,有人知道如何解决这个问题吗?

常见的模式是代理模式。此模式允许您将关于使用哪个实现的决定延迟到运行时,并将决定隐藏在代理中,同时仍然允许预先构建完整的对象图。

示例:

public sealed class RequestPermissionSelectorProxy : IPermission
{
    private readonly PermissionRepository one;
    private readonly PermissionRepositoryTwo two;

    public RequestPermissionSelectorProxy(
        PermissionRepository one, PermissionRepositoryTwo two) {
        this.one = one;
        this.two = two;
    }

    // Here select the permission based on some runtime condition. Example:
    private IPermission Permission => 
        HttpContext.Current.Items["two"] == true ? two : one;

    public object PermissionMethod(object arguments) {
        return this.Permission.PermissionMethod(arguments);
    }
}

注册方法如下:

container.RegisterType<IPermission, RequestPermissionSelectorProxy>(
    new HierarchicalLifetimeManager());