Joh*_*ren 5 c# dependency-injection mef
我现在正在和MEF合作,但我正在寻找的答案可能与MEF无关 - 它都是依赖注入 - 我只是在这里使用MEF术语作为例子.
简短的背景故事,我在MSDN上阅读了这篇文章,重点是复合应用程序
在这个图中有三个东西,shell,应用程序服务和模块.这是一个复合应用程序.
alt text http://i.msdn.microsoft.com/cc785479.fig02(en-us).gif
我没有完全得到的是应用服务部分.什么是服务,它是什么样的?如何通过模块公开服务以及如何使用不同模块的服务?
我真的很想看到一些简洁的小代码示例,没有任何花哨的东西可以用来说明这一切是如何实现的(应用程序服务部分).
就 MEF 而言,应用程序服务只是另一个可组合部分。您可以编写的任何接口或类都可以充当服务。
每个服务都会有一些您想要实现的接口或基类。IService您可以通过某种类型的界面(并用于[ImportMany]导入它们全部)来集体完成这些操作,但通常,您会需要不同的服务类型。
然后,您可以根据需要将其导入到您的类中。例如,假设您有一个通用的服务接口库,并且您提供:
public interface IDataRepostory
{
public IList<MyType> MyTypes { get; }
}
Run Code Online (Sandbox Code Playgroud)
然后你可以有一个单独的库导出特定类型:
[Export(typeof(IDataRepository))]
public class Repository: IDataRepostory
{
// implement interface for this specific "service"
}
Run Code Online (Sandbox Code Playgroud)
然后,您的主程序将能够根据需要导入它,并针对它编写代码。例如,假设您想要显示客户,您需要从数据层加载客户。如果您想通过存储库加载,可以将存储库导入到应用程序的特定部分:
public class CustomersViewModel
{
[Import]
public IDataRepository
{
get; set;
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以将此服务直接组合到您的应用程序中。
这被认为是“应用程序服务”,因为它是某些通用服务的特定于应用程序的实现 - 它不是与视图相关的组件,并且可以在整个应用程序中使用。
| 归档时间: |
|
| 查看次数: |
1502 次 |
| 最近记录: |