【问题标题】:Injecting base class with interface .NET Core使用接口 .NET Core 注入基类
【发布时间】:2020-09-04 21:59:23
【问题描述】:

我想问你我在这里遵循什么样的设计模式,某种适配器?您还推荐任何更简单的解决方案吗?

我正在尝试实现的是针对不同业务实现的验证模式。

我有一个实现接口的通用基类。 (是否可以使用抽象类?,应该如何注入?)

public class BaseValidation<T> : IValidationHandler<T>
{
    public virtual void Validate(T modelToValidate)
    {
        //Base Implementation
    }
}

界面

 public interface IValidationHandler<T>
 {
        void Validate(T modelToValidate);
 }

具体实现

public class SpecificValidation : BaseValidation<SpecificDTO>
{
     public override void Validate(SpecificDTO modelToValidate)
     {
         base.Validate(modelToValidate);

         //Implement here specific validation 
     }
}

注入

services.AddScoped(typeof(IValidationHandler<>), typeof(BaseValidation<>));
services.AddScoped<BaseValidation<SpecificDTO>, SpecificValidation>();

【问题讨论】:

  • 我认为它非常接近原型模式。
  • 嗨 Raju,原型模式的主要目标不是实现克隆功能吗?谢谢
  • 使用原型实现克隆只是一个用例。您可以将原型用于很多事情。
  • 在旁注中,不要把模式放在心上。对 SOLID 有很好的理解,并在编写代码时牢记这些,模式自然会发展 (IMO)。

标签: c# .net asp.net-core .net-core dependency-injection


【解决方案1】:

对于自动注入,您可以使用 services.Scan 的所有接口。例如:

        services
                .Scan(s =>
                {
                    s.FromAssemblies(assembly)
                        .AddClasses(classes => classes.Where(c =>
                        {
                            var allInterfaces = c.GetInterfaces();
                            return
                                Enumerable.Any<Type>(allInterfaces, y =>
                                    IntrospectionExtensions.GetTypeInfo(y).IsGenericType && IntrospectionExtensions.GetTypeInfo(y).GetGenericTypeDefinition() ==
                                    typeof(IValidationRuleHandler<>));
                        }))
                        .AsSelf()
                        .AsImplementedInterfaces()
                        .WithTransientLifetime();
                });

但对于其他开发人员来说,它看起来就像魔术 :) 只添加了实现,它添加到了注入中

【讨论】:

    猜你喜欢
    • 2021-05-28
    • 1970-01-01
    • 2021-12-08
    • 2020-03-17
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 2019-04-13
    • 2019-07-11
    相关资源
    最近更新 更多