Autofac使用不同的参数解析相同的类实例

问题描述 投票:1回答:1

我有一个Xamarin.Forms应用程序,正在使用Autofac进行DI。

所以我想要的很简单,但是我无法做一些看起来像是在做的事情。

因此,我有一个包含两个构造函数的类,它们两个都有一个参数,根据某些条件,我想解析其中一个。例如,我有一个类A,并且我想根据条件B或C解决的问题。

例如:

public class A
{

   public A(B bObject)
   {...}

   public A(C cObject)
   {...}
}

但是我不知道该怎么做。我尝试做类似下面的事情:

注册:

 builder.RegisterType<A>().
            UsingConstructor(typeof(C)).
            Named<A>(nameof(C));

 builder.RegisterType<A>().
            UsingConstructor(typeof(B)).
            Named<A>(nameof(B));

解决:

DiContainer.ResolveNamed<A>(nameof(B));
DiContainer.ResolveNamed<A>(nameof(C));

我对AutoFac有点陌生,我什至不确定这是否是正确的方法,我认为这与我不确定两次注册有关系。

强烈建议您提供任何建议或帮助。

c# xamarin c#-4.0 dependency-injection autofac
1个回答
0
投票

这是一个简单的解决方法:

您可以将B类和C类包装到另一个类中,然后在autofac中注册:

public class Wrapper {
  public B BObject;
  public C CObject;
}

然后您可以像这样做一点(我不知道解决该问题的正确方法,因为我目前没有IDE,但是我希望您了解我在这里做什么):

DiContainer.ResolveNamed<A>(new Wrapper(){BObject = Binstance});

另一个解决方案:

您还可以根据需要注册B或C。

如果要用B实例化该类,请在autofac上注册B,然后解析该类。

但是该类需要有两个构造函数。一个带有B作为参数,另一个带有C ...

我认为Autofac会解决,具体取决于注册的内容。

© www.soinside.com 2019 - 2024. All rights reserved.