我有一个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有点陌生,我什至不确定这是否是正确的方法,我认为这与我不确定两次注册有关系。
强烈建议您提供任何建议或帮助。
这是一个简单的解决方法:
您可以将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会解决,具体取决于注册的内容。