c# - 动态依赖注入(inject) Web Api

标签 c# dependency-injection unity-container

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

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

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

至此,一切OK。但我需要动态设置我的类(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());  

关于c# - 动态依赖注入(inject) Web Api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38854604/

相关文章:

c# - 在 WPF Treeview 中搜索特定的 TreeViewItem

javascript - 将 lodash 注入(inject) Angular 提供程序

unit-testing - 如果我使用 Mockito,我什至需要 Guice 吗?

c# - 具有实际表名的数据集

c# - 漏洞? System.ArgumentException : 'unable to figure out route for:

dependency-injection - findbugs:读取@autowired forunit test 上的未写字段

c# - 统一容器可以注册内部类的类型吗?

inversion-of-control - 使用 Unity IOC 时出现 StackoverflowException

c# - Unity InjectionFactory 不运行

c# - WCF 何时使用 MessageHeader 而不是在函数参数中传递变量