2

プロジェクト「Modularity with unity」に似たものをコーディングしようとしています。モジュールA(コード経由でロード)とモジュールD(ディレクトリからロード)の2つのモジュールを構築しました。両方とも正常にロードされます。

しかし、依存関係を設定しようとすると機能しません。このプロジェクトで依存関係がどこに言及されているのか、私は本当に理解できません。(依存関係を ModuleA クラスの属性として設定し、moduleD はビルド後にコピーされます) これが私の実装です:

Bootstrapper.cs

protected override IModuleCatalog CreateModuleCatalog()
{
    return new AggregateModuleCatalog();
}

protected override void ConfigureModuleCatalog()
{
    base.ConfigureModuleCatalog();

    Type moduleAType = typeof(ModuleAModule);
    ModuleCatalog.AddModule(new ModuleInfo()
    {
        ModuleName = ModuleNames.ModuleA,
        ModuleType = moduleAType.AssemblyQualifiedName
    });    

    DirectoryModuleCatalog directoryCatalog = new DirectoryModuleCatalog() { ModulePath = @".\Modules" };
    ((AggregateModuleCatalog)ModuleCatalog).AddCatalog(directoryCatalog);
}

protected override void ConfigureContainer()
{
    base.ConfigureContainer();

    this.RegisterTypeIfMissing(typeof(IModuleTracker), typeof(ModuleTracker), true);
}

ModuleA.cs

[Module(ModuleName = ModuleNames.ModuleA)]
[ModuleDependency(ModuleNames.ModuleD)]
public class ModuleAModule : IModule
{
    private ILoggerFacade _logger;
    private IModuleTracker _moduleTracker;

    public ModuleAModule(ILoggerFacade logger, IModuleTracker moduleTracker)
    {
        _logger = logger;
        _moduleTracker = moduleTracker;

        _moduleTracker.ModuleConstructed("ModuleA");
    }

    public void Initialize()
    {
        _logger.Log("ModuleA demonstrates logging during Initialize().", Category.Info, Priority.Medium);

        _moduleTracker.ModuleInitialized("ModuleA");
    }
}

ModuleD.cs

[Module(ModuleName = ModuleNames.ModuleD)]
public class ModuleDModule : IModule
{
    private ILoggerFacade _logger;
    private IModuleTracker _moduleTracker;

    public ModuleDModule(ILoggerFacade logger, IModuleTracker moduleTracker)
    {
        _logger = logger;
        _moduleTracker = moduleTracker;

        _moduleTracker.ModuleConstructed("ModuleD");
    }

    public void Initialize()
    {
        _moduleTracker.ModuleInitialized("ModuleD");
    }
}
4

1 に答える 1

0

おそらくそれは、モジュールがロードされる順序と関係がありますか? 私が見る限り、依存関係がある ModuleD の前に Module A がロードされます。それがあなたの助けになるかどうかはわかりませんが、それが私の最初の考えでした.. どのエラーメッセージが表示されますか?

于 2013-04-05T09:41:39.313 に答える