如何为IOC的某些接口注册多个数据提供者(我使用Ninject但你可以回答一般),例如ISettingsRepository
由JsonSettingsProvider
和XmlSettingsProvider
实现。
我正在将我的数据(本例中的设置)从XML迁移到JSON,并且需要在应用程序中同时使用它们(不是在其中一个之间选择,而是在运行时同时进行)。所以我需要基于XML的提供程序来读取序列化的内容并使用JSON提供程序将其序列化为JSON。
public class WebSettings
{
[Inject]
private ISettingsRepository _repository;
private void Load()
{
_repository = DependencyResolver.Current
.GetService<ISettingsRepository>();
...
现在我已经注册了如下:
kernel.Bind<ISettingsRepository>()
.To<XmlSettingsProvider>()
.InRequestScope();
希望你理解我的意思。
答案 0 :(得分:1)
我尝试过但无法使用Factory进行此操作。
但您可以查看stackoverflow上的这个主题
Ninject : Resolving an object by type _and_ registration name/identifier
答案 1 :(得分:0)
我知道unity(link on msdn)支持几个相同类型的命名实例:
public IUnityContainer RegisterInstance(
Type t,
string name,
Object instance,
LifetimeManager lifetime
)
然后在解决时,只需传递所需实例的名称。