10

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();

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.ResolutionExtensions.TryResolveService (IComponentContext コンテキスト、サービス サービス、IEnumerable 1 パラメータ)で Autofac.ResolutionExtensions.Resolve[TService](IComponentContext コンテキスト、IEnumerable` 1 パラメータ)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

Autofac.ResolutionExtensions.Resolve[TService](IComponentContext context, Parameter[] parameters)
at RestApi.Controllers.MyApiController.CreateEntityContext() in C:...

4

1 に答える 1

7

AFAIK、登録でNULLを返すと、常に例外がスローされます。それを処理する方法に関するいくつかのアイデアについては、この回答を確認してください。

于 2012-08-13T14:59:26.147 に答える