是否可以在autofac中解析服务而无需将其注册到容器中?

到目前为止,我已经提出了这样的建议:

    public object ResolveUnknownService(IContainer container, Type serviceType)
    {
        ILifetimeScope lifetimeScope = container.BeginLifetimeScope(b => b.RegisterType(serviceType).ExternallyOwned());
        try
        {
            return lifetimeScope.Resolve(serviceType);
        }
        finally
        {
            lifetimeScope.Dispose();
        }
    }


它可以工作,但是我有点担心性能。我也不想使用AnyConcreteTypeNotAlreadyRegisteredSource,因为我想具体说明我想要(或不想)使用哪种服务来解决此问题。

最佳答案

在您的示例中,处置临时生存期范围将处置所返回的对象及其任何依赖项;组件的生存期仅与解决它们的生存期范围有关。

是否存在识别这些类型的已知标准? AnyConcrete...类的构造函数有一个重载,它可以指定要解决的过滤器。如果有这样的条件,那么RegisterAssemblyTypes()几乎总是一个更好的选择。

(除非您要与旧版/第三方框架集成,否则此模式可能不是使用Autofac的最佳方法,因为它会导致Service Locator路径失效。YMMV当然是。)

关于c# - 在autofac中解析服务而无需注册服务类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4182930/

10-17 02:40