C# 依赖注入中的工厂模式

C# 依赖注入中的工厂模式,c#,dependency-injection,C#,Dependency Injection,我有一个这样的班级: public class SomeRepo : ISomeRepo { private IThingFactory _thingFactory; public class SomeRepo (IThingFactory thingFactory) { _thingFactory = thingFactory; } public IThing GetThingFromDatabase(int id) {

我有一个这样的班级:

public class SomeRepo : ISomeRepo
{
    private IThingFactory _thingFactory;

    public class SomeRepo (IThingFactory thingFactory)
    {
        _thingFactory = thingFactory;
    }

    public IThing GetThingFromDatabase(int id)
    {

        string thingName = /* some call that gets back some primitives */
        IThing returnVal = _thingFactory.createThing(thingName);

        return returnVal;
    }
}
简而言之,
SomeRepo
是一个repo,负责与一些数据存储进行通信,以通过Id获取
i thing
。而
i thingfactory
是一个简单的工厂,在给定字符串属性的情况下返回
新的i thing

如果我使用的是依赖项注入容器,我是否仍然依赖于
IThingFactory
?我似乎是为了方便而混合了这两种设计模式。有没有一种更优雅的方式来构建一个不需要工厂的
I thing
,或者我有一个好的模式可以遵循

谢谢


编辑:我使用的DI容器是Ninject。

依赖注入是实现层间松散耦合的技术,而不是我所说的设计模式

混合设计模式或使用多种技术作为一种通用的陈述方式并没有什么错,除非您在不需要的地方引入复杂性

因此,我的建议是,通过质疑您的需求和理解设计模式的使用来处理问题,然后您将能够认识到使用特定模式的需要,以使代码可维护、可扩展或满足您试图满足的任何技术需求

我会问自己的问题:

我想解决的问题是什么

这个逻辑的可扩展性如何?活动部件是什么?核心要求是什么

哪种设计模式可以解决此类问题


您还需要权衡代码中引入的复杂性、使用某些设计模式所消耗的时间以及短期和长期使用它的好处?

如果我认为类只需要数据库的输出(因此如果它不需要DI容器的任何输出)如果你不想为了测试而模拟它,那么你可以通过调用构造函数来创建这个类

否则,在我看来,工厂模式是正确的选择


对于NInject,有一个非常容易创建工厂的方法,您只需创建接口,扩展就可以在运行时创建相应的实现。

您能描述一下它吗?有多少类实现了它?这是一个简单的财产袋吗?它是否包含您可能希望改变的行为?
i它只由一个类实现,但将来可能由其他类实现。这是一个单独的财产袋。看看。