具有 MVC 的 IOC 对同一接口进行多次注册

本文关键字:注册 接口 MVC IOC 具有 | 更新日期: 2023-09-27 18:33:54

如何为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();

希望你明白我的意思。

具有 MVC 的 IOC 对同一接口进行多次注册

我尝试过,但无法使用工厂做到这一点。

但是你可以在stackoverflow上看看这个线程

Ninject :通过类型 _and_ 注册名称/标识符解析对象

我知道unity(msdn上的链接)支持多个相同类型的命名实例:

public IUnityContainer RegisterInstance(
    Type t,
    string name,
    Object instance,
    LifetimeManager lifetime
)

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