如何更好地解决工厂创建的对象中的依赖关系?
How better to resolve dependencies in object created by factory?
例如我有依赖:
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 实例,我的依赖项将不会被解析。或者我应该从 Factory 中逃脱并将逻辑移动到 MyClass 的构造函数中?在像 container.RegisterType()?
这样的容器中注册之后
对于独立于您正在创建的实例的依赖项,将它们注入工厂并存储它们直到需要。
对于独立于创建上下文但需要为每个创建的实例重新创建的依赖项,将工厂注入工厂并存储它们。
对于依赖于创建上下文的依赖项,将它们传递到工厂的Create
方法中。
例如我有依赖:
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 实例,我的依赖项将不会被解析。或者我应该从 Factory 中逃脱并将逻辑移动到 MyClass 的构造函数中?在像 container.RegisterType()?
这样的容器中注册之后对于独立于您正在创建的实例的依赖项,将它们注入工厂并存储它们直到需要。
对于独立于创建上下文但需要为每个创建的实例重新创建的依赖项,将工厂注入工厂并存储它们。
对于依赖于创建上下文的依赖项,将它们传递到工厂的Create
方法中。