是否有一个工厂方法来检索注入的对象是良好的实践,还是仅使用DI框架的工厂方法就可以了呢?
我正在使用Structure Map,我应该只使用ObjectFactory.GetInstance();,还是应该创建工厂类,在这个类内部调用ObjectFactory.GetInstance();?因为如果我在我的类中调用ObjectFactory.GetInstance(); 我会对DI框架产生耦合。如果我对这些概念不了解,请原谅,我是新手。谢谢!
是否有一个工厂方法来检索注入的对象是良好的实践,还是仅使用DI框架的工厂方法就可以了呢?
我正在使用Structure Map,我应该只使用ObjectFactory.GetInstance();,还是应该创建工厂类,在这个类内部调用ObjectFactory.GetInstance();?因为如果我在我的类中调用ObjectFactory.GetInstance(); 我会对DI框架产生耦合。如果我对这些概念不了解,请原谅,我是新手。谢谢!
当您需要对实例的创建时间进行精细控制时,工厂方法非常有用。但是,您不应直接依赖于容器本身,而是将工厂方法注入为依赖项。以下是说明此概念的示例:
public class SomeController
{
private Func<ISomeService> _serviceFactory;
public SomeController(Func<ISomeService> serviceFactory)
{
_serviceFactory = serviceFactory;
}
public void DoSomeWork()
{
var service = _serviceFactory();
....
}
}
var container = new Container(cfg =>
cfg.For<ISomeService>().Use(() => new SomeServiceImpl())
);