1

我正在使用 Prism/Unity 编写 WPF 应用程序。

我有我的主要应用程序(带有引导程序)。

我的每个模块都有接口。例如:

MyModuleA实现IMyModuleA

MyModuleB实现IMyModuleB

我想实现松耦合和依赖注入。

所以在我的引导程序中,我想指定我正在加载一个基于接口的库(类型)。这将允许我独立构建模块。

在我的引导程序中,我有以下内容:

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

    string path = @"Modules.MyModuleA.dll";
    var assembly = Assembly.LoadFrom(path);
    var type = assembly.GetType("Modules.MyModuleA.MyModuleA");
    ModuleCatalog.AddModule(new ModuleInfo {
        ModuleName = type.Name,
        ModuleType = type.AssemblyQualifiedName,
        Ref = new Uri(path, UriKind.RelativeOrAbsolute).ToString()
    });
}

这是最好的方法吗?

4

1 回答 1

0

我必须说这不是最好的方法,因为您仍然按字符串指定类型,这更糟糕,因为为人为错误留出了空间。依赖注入和松散耦合是关于使用接口并动态注册实现该接口的不同类型。

如果您想为同一个界面动态加载不同的模块,您应该使用您自己的 Bootstraper,它在所需的代码路径中调用。在其中使用:

if(shouldUseEmail)                
 Container.RegisterType<IFeedbackService, EmailFeedbackService>();
else
 Container.RegisterType<IFeedbackService, SMSFeedbackService>();

后来你像这样解决:

var feedbackService = Container.Resolve<IFeddbackService>();

或者使用 DI(构造函数中的依赖注入)

于 2013-07-09T07:26:03.993 回答