1

TinyIoc を MvvmCross と統合しようとしています。https://github.com/MvvmCross/MvvmCross/wiki/Customising-using-App-and-Setup#ching-the-ioc-container-that-mvvmcross-usesの指示に従いました

アダプターを作成しました

public class TinyIoCMvxIoCAdapter : MvxSingleton<IMvxIoCProvider>, IMvxIoCProvider
{
  ...
}

すべてのメソッドを実装し、それを TinyIoC コンテナーに転送します。それは非常に簡単で、何かがサブスクライブされたときにコールバックを起動するための追加のコードを実装するだけで済みました。

void CallbackWhenRegistered<T>(Action action)
void CallbackWhenRegistered(Type type, Action action)

Setup.cs を変更しました

    protected override IMvxIoCProvider CreateIocProvider()
    {
        var provider = TinyIoCAdapterSetup.CreateIocProvider();
        return provider;
    }

 public class TinyIoCAdapterSetup
 {
    public static  IMvxIoCProvider CreateIocProvider()
    {
        var container = TinyIoCContainer.Current;
        container.AutoRegister(t => t == typeof(IMvxViewModel));
        return new TinyIoCMvxIoCAdapter(container);
    }
}

それはすべてうまくいきます。TinyIoc で register が呼び出され、問題が解決されていることがわかります。

機能しないのはプラグインです。Messenger プラグインを使用しており、TinyIoC 統合では、IMvxMessenger の ctor を挿入する ViewModel が解決されるときに、IMvxMessenger を解決できません。MessengerPluginBootstrap が Mvx によって作成されていることはわかりますが、IMvxMessenger を登録するための呼び出しが行われたことはわかりません。

私が間違っていることを誰かが知っていますか?

4

1 に答える 1

3

各プラグインには、プラグインを IoC コンテナーに登録するPluginLoaderために呼び出すクラスがあります。Bootstrapper

次のようになります。

public class PluginLoader
    : IMvxPluginLoader
{
    public static readonly PluginLoader Instance = new PluginLoader();

    private bool _loaded;

    public void EnsureLoaded()
    {
        if (_loaded)
        {
            return;
        }

        Mvx.RegisterSingleton<IMvxMessenger>(new MvxMessengerHub());
        _loaded = true;
    }
}

IoC アダプターが表示されないと、問題が何であるかを判断するのは困難です。プラグインを手動で登録して、IoC コンテナーが正しく機能しているかどうかを確認してください。

于 2014-03-19T12:35:50.847 に答える