我正在尝试摆脱使用 Autofac 的应用程序中的服务定位器模式。目前,我有这样的课程:
class Factory {
private readonly ILifetimeScope _scope;
public Factory(ILifetimeScope scope) {
_scope = scope;
}
public Operation CreateOperation(OperationData dto) {
var destinationType = NameConventionLookup(dto.GetType().Name);
return _scope.Resolve(destinationType, new TypedParameter(dto.GetType(), dto));
}
private Type NameConventionLookup(Type t) {
// Return a type by removing parts of the type name and appending others
}
}
基本上,我得到一个 poco 对象,并基于这个对象创建另一个对象,并将输入作为构造函数参数。示例类型:
class MyDto : OperationData {
public string Foo;
public int Bar;
}
class MyOperation : Operation {
public MyOperation(MyDto dto) { ... }
}
我可以摆脱工厂中的ILifetimeScope
吗?我想获得一些工厂方法,Func<OperationData, Operation>
之类的方法,但是Autofac可以生成吗?我可以帮助图书馆吗?
只要您的Factory
类是在组合根中定义的,就没有理由删除对ILifetimeScope
的引用,因为在这种情况下,不是服务定位器反模式,而只是机制。