2

一个人如何为 IOC 的某个接口注册多个数据提供者(我使用 Ninject,但您一般可以回答),例如ISettingsRepositoryJsonSettingsProviderand实现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();

希望你明白我的意思。

4

2 回答 2

1

我尝试过但无法使用 Factory 做到这一点。

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

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

于 2012-05-12T15:45:33.710 回答
0

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

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

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

于 2012-05-12T15:32:23.990 回答