IOC与MVC多次注册相同的接口

时间:2012-05-12 14:22:38

标签: c# asp.net-mvc dependency-injection inversion-of-control ninject

如何为IOC的某些接口注册多个数据提供者(我使用Ninject但你可以回答一般),例如ISettingsRepositoryJsonSettingsProviderXmlSettingsProvider实现。

我正在将我的数据(本例中的设置)从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();

希望你理解我的意思。

2 个答案:

答案 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
)

然后在解决时,只需传递所需实例的名称。