我有Parent
类和Child
类,
父母先对孩子做些事,然后处置。
class Parent
{
private IChild _child;
Parent(IChild child) { this._child=child }
DoAndDisposeChild()
{
//code
//this._child.dispose();
}
}
使用autofac
,我正在解决Parent
并使用以下方法调用DoAndDisposeChild
方法:
container.Resolve<Parent>().DoAndDisposeChild().
通过使用Owend
的{{1}}功能,我已经成功实现了这一目标:
autofac
并将private Owned<IChild> _child;
修改为:
DoAndDisposeChild
问题是我将代码耦合到DoAndDisposeChild()
{
//code
this._child.Dispose();
}
,我正在寻找使用autofac
来实现不用的处置问题的方法?
答案 0 :(得分:1)
要将业务逻辑与Autofac脱钩,需要将 Child 类注册为在 Composition Root 级别具有external ownership。在这种情况下,Autofac不必担心处置 Child 的任何实例:
builder
.RegisterType<Child>()
.As<IChild>
.ExternallyOwned();
传递给构造函数 IChild :
class Parent
{
private IChild _child;
public Parent(IChild child) { this._child=child }
// ..
}
作为另一种方法,可以将子实例的创建收取到诸如Factory或something else之类的单独服务中:
class Parent
{
private IChild _child;
public Parent(IChildFactory childFactory) { this._child = childFactory.CreateChild(); }
}