我正在尝试使用动态 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/