我有简单的策略类(class)。

 public class LinkQualifier : ILinkQualifier
    {
        private readonly IEnumerable<IQualifier> _qualifiers;

        public LinkQualifier(IEnumerable<IQualifier> qualifiers)
        {
            _qualifiers = qualifiers;
        }

        public IQualifier Qualify(Uri uri)
        {
            return _qualifiers.FirstOrDefault(q => q.CanQualify(uri));
        }


    }

我如何在 MVC 核心 DI 容器中注册它?我发明了这样的东西:
services.AddTransient<ILinkQualifier, LinkQualifier>((ctx =>
            {
                var qualifiers = new List<IQualifier> {...};
                return new LinkQualifier(qialifiers);
            }));

但这看起来很糟糕……有更好的解决方案吗?

最佳答案

使用 ServiceCollection 注册多个实现。
IEnumerable<IQualifier> 依赖项将被 DI 容器识别,并将传递所有已注册的实现。

services.AddTransient<IQualifier, QualifierOne>();
services.AddTransient<IQualifier, QualifierTwo>();
services.AddTransient<IQualifier, QualifierThree>();

services.AddTransient<ILinkQualifier, LinkQualifier>();

关于c# - 在 MVC Core DI 中注册服务集合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53428178/

10-11 12:00