2012-05-05 17 views
3

SimpleIOCパターンを実装した最新のMVVM Lightツールキットv4(NuGetプレビューv4.1.21、DLL v:4.0.21.25725)を使い始めました。私ViewModelLocator.csでMVVM LightとSimpleIOCのデザインタイムリポジトリを使用

、私は両方の設計およびランタイムのリポジトリを処理するために、次のいる:

public ViewModelLocator() 
{ 
    ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default); 
    if (ViewModelBase.IsInDesignModeStatic) 
    { 
    SimpleIoc.Default.Register<IWebRepository, DesignWebRepository>(); 
    } 
    else 
    { 
    SimpleIoc.Default.Register<IWebRepository, WebRepository>(); 
    } 

    SimpleIoc.Default.Register<MainViewModel>(); 
} 

public MainViewModel Main 
{ 
    get 
    { 
    return ServiceLocator.Current.GetInstance<MainViewModel>(); 
    } 
} 

しかし、これは私にデザイナー(そうコンパイルエラーなし、またランタイムエラーで、次の例外を与えますが、私は見るために私の混合性を)失う:
Class Repository.IWebRepository is already registered
コール)

IWebRepository(最初.Register(で):

public interface IWebRepository 
{ 
    string Test(string data); 
} 

DesignWebRepository:

public class DesignWebRepository : IWebRepository 
{ 
    public string Test(string data) 
    { 
    return "design result: " + data; 
    } 
} 

WebRepository:

public class WebRepository : IWebRepository 
{ 
    public string Test(string data) 
    { 
    return "result: " + data; 
    } 
} 

MainViewModel:私はここで何を

public class MainViewModel : ViewModelBase 
{ 
    IWebRepository webRepository; 

    public MainViewModel(IWebRepository webRepository) 
    { 
    this.webRepository = webRepository; 
    if (IsInDesignMode) 
    { 
     // Code runs in Blend --> create design time data. 
    } 
    else 
    { 
     // Code runs "for real" 
    } 
    } 
} 

をしないのですか?

+0

コードは正常です。このMVVM Light 4ですか?私はクラスとインターフェイスの定義を表示する必要があると思います。 – Phil

+0

コードが更新されました。 –

+0

あなたのコードは大丈夫です。私はMVVM Light v4.0.30319を持っています。ちなみに、私はあなたのSOガジェットが好きです。恥ずかしながら、それは反応を示さない。 – Phil

答えて

0
 if (ViewModelBase.IsInDesignModeStatic) 
     { 
      if (!SimpleIoc.Default.IsRegistered<IRepository>()) 
      { 
       SimpleIoc.Default.Register<IRepository, DesignWebRepository>(); 
      } 
     } 
     else 
     { 
      SimpleIoc.Default.Register<IRepository, WebRepository>(); 
     } 

二重登録を防ぐためにリポジトリがすでに登録されているかどうかを確認してください。これで問題が解決されることを願っています

関連する問題