2013-12-10 3 views
0

MvxApplication에서 EndingWith 메서드를 사용하여 리포지토리를 등록하고 있습니다.MvxException : 형식을 해결하지 못했습니다 ... IRepository

우리의 App.cs와 우리 저장소가 같은 프로젝트에 있었고 모든 것이 제대로 작동하는 다른 프로젝트에서이 접근법을 사용했습니다. 이제 App.cs를 별도의 프로젝트로 옮겼으므로 MvvmCross IOC는 핵심 응용 프로그램의 종속성을 등록하지 않습니다.

초기화 방법 질문

public class DatabaseVersionRepository : RepositoryBase, IDatabaseVersionRepository 
{ 
    // do stuff 
} 

예외

Cirrious.CrossCore.Exceptions.MvxException: Failed to resolve type OurApp.AppCore.Repositories.IDatabaseVersionRepository 
12-10 10:35:43.275 E/mono (24043): 
12-10 10:35:43.275 E/mono (24043): Unhandled Exception: 
12-10 10:35:43.275 E/mono (24043): Cirrious.CrossCore.Exceptions.MvxException: Failed to resolve type OurApp.AppCore.Repositories.IDatabaseVersionRepository 
12-10 10:35:43.275 E/mono (24043): at Cirrious.CrossCore.IoC.MvxSimpleIoCContainer.Resolve (System.Type t) [0x00000] in <filename unknown>:0 
12-10 10:35:43.275 E/mono (24043): at Cirrious.CrossCore.IoC.MvxSimpleIoCContainer.Resolve[IDatabaseVersionRepository]() [0x00000] in <filename unknown>:0 
12-10 10:35:43.275 E/mono (24043): at OurApp.CustomApp.Core.App.Initialize() [0x00135] in c:\Projects\OurApp\OurApp.Droid\App.cs:63 
12-10 10:35:43.275 E/mono (24043): at Cirrious.MvvmCross.Platform.MvxSetup.CreateAndInitializeApp (IMvxPluginManager pluginManager) [0x00000] in <filename unknown>:0 
12-10 10:35:43.275 E/mono (24043): at Cirrious.MvvmCross.Platform.MvxSetup.InitializeApp (IMvxPluginManager pluginManager) [0x00000] in <filename unknown>:0 
12-10 10:35:43.275 E/mono (24043): at Cirrious.MvvmCross.Platform.MvxSetup.InitializeSecondary() [0x00000] in <filename unknown>:0 
12-10 10:35:43.275 E/mono (24043): at Cirrious.MvvmCross.Droid.Platform.MvxAndroidSetupSingleton.<InitializeFromSplashScreen>b__5 (System.Object ignored) [0x00000] in <filename unknown>:0 
The program 'Mono' has exited with code 0 (0x0). 

프로젝트 구조가이 같은 것입니다에

public override void Initialize() { 

    // stuff happens here 

    // Register all repositories 
    CreatableTypes().EndingWith("Repository").AsInterfaces().RegisterAsLazySingleton(); 

    // more stuff happens here 

    // Resolve the DbVersionRepo to run migrations. 
    // This line is breaking 
    var databaseVersionRepository = MvxSimpleIoCContainer.Instance.Resolve <IDatabaseVersionRepository>(); 

} 

저장소.

OurCompany.AppCore 
    \ Repositories 
     \IDatabaseVersionRepository.cs 
     \DatabaseVersionRepository.cs 

OurCompany.CustomApp.Core 
    \ App.cs 

OurCompany.CustomApp.Droid.Ui 
    \ Setup.cs 

이 방법을 시도했지만 동일한 결과가 나타납니다.

+1

https://github.com/MvvmCross/MvvmCross/wiki/Service-Location-and-Inversion-of-Control에서 참조하는 '규칙에 의한 일괄 등록'- 비 핵심 어셈블리 예제를 포함합니다 – Stuart

+0

@stuart 오 훌륭합니다. 첫 번째 읽을 때 찾지 못했습니다. '.InNamespace ("MyApp.Core.HyperSpace")'가 타입을 사용하는 대신 외부 DLL에 접근하도록하려면 무엇이 필요합니까? –

답변

2

위의 스튜어트의 설명에 따라 현재 어셈블리 외부에있는 종속성을 해결하는 방법은 다음을 수행하는 것입니다.

typeof(RepositoryBase).Assembly 
         .CreatableTypes() 
         .EndingWith("Repository") 
         .AsInterfaces() 
         .RegisterAsLazySingleton(); 
관련 문제