我正在使用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()
});
}
这是最好的方法吗?
答案 0 :(得分:0)
我必须说这不是最好的方法,因为你仍然指定字符串类型,这更糟糕,因为留下了人为错误的空间。依赖注入和松散耦合是关于使用接口和注册实现该接口的不同类型。
如果您想为同一个接口动态加载不同的模块,您应该使用自己的Bootstraper,它在所需的代码路径中调用。在其中使用:
if(shouldUseEmail)
Container.RegisterType<IFeedbackService, EmailFeedbackService>();
else
Container.RegisterType<IFeedbackService, SMSFeedbackService>();
以后再解决这个问题:
var feedbackService = Container.Resolve<IFeddbackService>();
或者使用DI(构造函数中的依赖注入)