2

IOC との特定のインターフェイスに複数のデータ プロバイダーを登録するにはどうすればよいですか (私は Ninject を使用しますが、一般的には答えることができます)。たとえば、 andISettingsRepositoryによって実装されます。JsonSettingsProviderXmlSettingsProvider

データ (この場合は設定) を XML から JSON に移行しており、アプリケーションで両方を同時に使用する必要があります (どちらかを選択するのではなく、実行時に両方を同時に使用する必要があります)。したがって、シリアル化されたものを読み取り、JSON プロバイダーを使用してそれを JSON としてシリアル化するには、XML ベースのプロバイダーが必要です。

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:タイプ_および_登録名/識別子によるオブジェクトの解決

于 2012-05-12T15:45:33.710 に答える
0

Unity ( msdn のリンク) が同じタイプの複数の名前付きインスタンスをサポートしていることを知っています。

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

解決したら、必要なインスタンスの名前を渡すだけです。

于 2012-05-12T15:32:23.990 に答える