Tag: dependency injection

使用DI和IoC的工厂方法

我熟悉这些模式,但仍然不知道如何处理以下情况: public class CarFactory { public CarFactory(Dep1,Dep2,Dep3,Dep4,Dep5,Dep6) { } public ICar CreateCar(type) { switch(type) { case A: return new Car1(Dep1,Dep2,Dep3); break; case B: return new Car2(Dep4,Dep5,Dep6); break; } } } 通常,问题在于需要注入的引用量。 当有更多的汽车时会更糟。 我想到的第一种方法是在工厂构造函数中注入Car1和Car2,但它违反工厂方法,因为工厂将始终返回相同的对象。 第二种方法是注入servicelocator但它的反模式到处都是。 怎么解决? 编辑: 替代方式1: public class CarFactory { public CarFactory(IContainer container) { _container = container; } public ICar CreateCar(type) { switch(type) { […]

dependency injection类型选择

最近我遇到了一个问题,我必须根据参数选择一个类型。 例如:用于发送应根据输入参数选择正确频道(电子邮件,短信,…)的通知的类。 我看起来像这样: public class NotificationManager { IEmail _email; ISms _sms; public NotificationManager (IEmail email, ISMS sms) { _email = email; _sms = sms; } public void Send(string type) { switch(type) { case “email”: _email.send; break; case “sms”: _sms.send; break; } } } 这里的问题是,当我使用这种结构时,构造函数会随着发送通知的所有不同方法快速增长。 我真的不喜欢这个,它使单位测试这个选择单元无法管理。 我不能简单地说new email(); 因为通知类型的电子邮件将依赖于IEmailManager,这只会移动问题。 是否有某种模式可以做同样的事情,但是以更好,更清洁的方式?