更好的方法将多个接口注入到多个类中,而无需调用base .Net

n6lpvg4x  于 2023-06-25  发布在  .NET
关注(0)|答案(2)|浏览(121)

如果我有多个不同的类被重构以实现相同的多个接口,有没有更好的方法可以将这些接口注入到这些类中,而不必在每个实现构造函数中指定相同的接口?
目前据我所知,它的工作原理是

public abstract class Shape {
    protected ILogger logger {get; set;}
    protected IEventService service {get;set;}

    public Shape(ILogger logger, IEventService service){
        this.logger = logger;
        this.service = service;    
    }
}

public class Square : Shape{

    public Square(ILogger logger, IEventService service) : base(logger,service){}

}

然而,随着更多的接口和多个子接口,这将导致代码中的大量复制/粘贴。
有没有一种方法可以这样设计,使子类不必指定注入的接口,从而使重构多个类更清晰?
我已经尝试了标准的抽象类,但是它需要你发送注入的实现。

fdbelqdn

fdbelqdn1#

如果你使用依赖注入框架,你可以写这样的代码:

public abstract class Shape
{
    [Inject]
    protected ILogger logger { get; set; }
    [Inject]
    protected IEventService service { get; set; }
}

[Factory(typeof(Square))]
public class Square : Shape { }

[Factory(typeof(ILogger))]
public class Logger : ILogger { }

[Factory(typeof(IEventService))]
public class EventService : IEventService { }

然后解析和注入代码看起来像这样:

IContext context = Injectivity.Context.CreateRoot();
context.Register(this.GetType().Assembly);
Square square = context.Resolve<Square>();

这一切都在我写的依赖注入框架中,但也有一些维护良好的框架可用。

fhity93d

fhity93d2#

在阅读了Panagiotis链接的内容-Constructor Over-Injection之后,我将重构代码库,以便服务更紧密地遵循SRP,以及添加一些Aggregate Services以减少需要注入到构造函数中的项目数量。谢谢你的帮助

相关问题