如何在Autofac注册中返回NULL?

use*_*899 6 c# exception-handling autofac

有没有办法用autofac返回null?如果我这样做,我会得到一个例外.

在某些情况下,我无法解析一个对象,应该返回null.

m_builder.Register < IMyObject > ((c, p) => {
  //do something

  if (...) {
    //cant create/resolve object (error case)
    return null;
  } else {
    return new IMyObject();
  }

}).InstancePerHttpRequest();
Run Code Online (Sandbox Code Playgroud)

是否有使用autofac执行此操作的内置方法?

编辑:我想返回null.或者执行其他操作以通知用户创建不成功.如果我返回null,则抛出此异常:

DependencyResolutionException:

注册为创建"IMyObject"实例的委托返回null.

堆栈跟踪:

在Autofac.Core.Activators.Delegate.DelegateActivator.ActivateInstance(IComponentContext上下文,IEnumerable的1个参数) 在Autofac.Core.Resolving.InstanceLookup.b__0() 在Autofac.Core.Lifetime.LifetimeScope.GetOrCreateAndShare(GUID ID,Func键1个参数) 在Autofac.Core.Resolving.ResolveOperation.Execute(IComponentRegistration注册,IEnumerable的1个参数) 在Autofac.ResolutionExtensions.TryResolveService(IComponentContext上下文中,服务服务,IEnumerable的1个参数) 在Autofac.ResolutionExtensions.Resolve [TService](IComponentContext上下文,IEnumerable` 1个参数) 在Autofac.ResolutionExtensions.Resolve [TService](IComponentContext上下文中,参数[]参数) 在RestApi.Controllers.MyApiController.CreateEntityContext()在C:...1 parameters)
at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable


1 creator)
at Autofac.Core.Resolving.InstanceLookup.Execute() at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, IComponentRegistration registration, IEnumerable

1 parameters)
at Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(IComponentRegistration registration, IEnumerable

1 parameters, Object& instance) at Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable


Jim*_*lla 5

AFAIK,在注册中返回NULL将始终抛出异常.有关如何处理它的一些想法,请查看此答案.