如何更好地解决工厂创建的对象中的依赖关系?

Posted

技术标签:

【中文标题】如何更好地解决工厂创建的对象中的依赖关系?【英文标题】:How better to resolve dependencies in object created by factory? 【发布时间】:2016-09-29 10:53:04 【问题描述】:

例如我有依赖:

public interface IMyDependency



public class MyDependency : IMyDependency


在 MyClass 对象中注入:

public interface IMyInterface



public class MyClass : IMyInterface

    [Dependency]
    public IMyDependency MyDependency  get; set; 

我还有一个工厂,它创建 MyClass 实例:

public interface IFactory

    IMyInterface CreateMyObject();



public class Factory : IFactory

    public IMyInterface CreateMyObject()
    
       // some checks before creation
       // for. ex check if this type of object supported by OS and thow    exception if not

         return new MyClass();
    


...
container.RegisterType<IFactory, Factory>();

如果我使用“new”关键字创建 MyClass 实例,我的依赖项将无法解析。或者我应该逃离工厂并将逻辑移动到 MyClass 的构造函数中?并在容器中注册后,如 container.RegisterType()?

【问题讨论】:

【参考方案1】:

对于独立于您正在创建的实例的依赖项,将它们注入工厂并存储它们直到需要。

对于独立于创建上下文但需要为每个创建的实例重新创建的依赖项,将工厂注入工厂并存储它们。

对于依赖于创建上下文的依赖,将它们传递到工厂的Create方法中。

【讨论】:

以上是关于如何更好地解决工厂创建的对象中的依赖关系?的主要内容,如果未能解决你的问题,请参考以下文章

如何:查看数据库对象的依赖关系

SpringDI依赖注入

依赖注入与对象间关系

20160606本周随笔

创建新应用程序时无法解决spring boot中的依赖关系[关闭]

工厂模式