使用autofac注入类型转换工厂

时间:2014-02-28 15:42:03

标签: c# autofac

我正试图在使用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可以生成这个吗?我可以帮助图书馆吗?

1 个答案:

答案 0 :(得分:0)

只要在Composition Root内定义了Factory类,就没有理由删除对ILifetimeScope的引用,因为在这种情况下不是Service Locator anti-pattern,而是merely mechanics