分享 MEF,模块解耦,WCF Rest 扩展 基础示例

黄瓜黄瓜 2014-03-19 12:05:07
加精
没有画图,随便说明一下
1.MEF扩展 ObejctFactory ,可根据版本号来实例化对应的实现类。
2.可实现Service的插件化
3.异常的统一处理,客户端可根据不同的errorCode来做处理。
4.模块和模块之间的调用不直接引用,通过IBizService来解耦。
5.WCF的扩展

下载地址
http://download.csdn.net/detail/net_java_dram/7062937

Service:



业务异常处理


系统异常处理


项目结构:


关键代码


void Application_Start(object sender, EventArgs e)
{
WebServiceHostFactory factory = new CustomerWebServiceHostFactory(); //自定义HostFactory 扩展

RouteTable.Routes.Add(new ServiceRoute("Domain1Service",factory,typeof(MEFDemo.Domain1.Service.Domain1Service)));
RouteTable.Routes.Add(new ServiceRoute("Domain2Service", factory, typeof(MEFDemo.Domain2.Service.Domain2Servie)));
}


Domain1Service

public partial class Domain1Service
{
[WebGet(UriTemplate = "product/{id}", ResponseFormat = WebMessageFormat.Xml)]
[OperationContract]
public ResponseResult<Product> GetProduct(string id)
{
var tempId = 0;
int.TryParse(id, out tempId);
var result = ObjectFactory<ProductProcessor>.Instance.Get(tempId);
return new ResponseResult<Product> { Result = result };
}

[WebInvoke(UriTemplate = "product/query", Method = "Get", ResponseFormat = WebMessageFormat.Xml)]
[OperationContract]
public ResponseResult<List<Product>> QueryProducts(ProductRequest request)
{
//todo request maping produtFilter
var result= ObjectFactory<IProductDA>.Instance.Query(new ProductQueryFilter { ProductName=request.ProdutName});
return new ResponseResult<List<Product>> { Result = result };
}


}
public partial class Domain1Service
{
[WebInvoke(UriTemplate = "product/create", Method = "Post", ResponseFormat = WebMessageFormat.Xml)]
[OperationContract]
public void CreateProduct(ProductRequest request)
{
//todo request maping Produt
ObjectFactory<ProductProcessor>.Instance.Add(new Product { ProductName = request.ProdutName });
}
}

业务层

namespace MEFDemo.Domain1.BizProcess
{
[VersionExport(typeof(ProductProcessor), "1.0")]
public class ProductProcessor
{

public Product Get(int id)
{
var product = ObjectFactory<IProductDA>.Instance.Get(id);
if (product == null)
{
throw new BizException("商品不存在", "521"); //业务异常
}
if (product.ProductName == "B")
{
var simpException = product.ProductName.Substring(100, 1111); //系统异常
}
return product;
}

public void Add(Product product)
{
if (ObjectFactory<IProductDA>.Instance.Get(product.ProductName) != null)
{
throw new BizException("商品名称已存在", "521");
}
ObjectFactory<IProductDA>.Instance.Add(product);
throw new BizException("添加成功", "520");
}


}

}


数据接口

namespace MEFDemo.Domain1.IDataAccess
{
public interface IProductDA
{
Product Get(int id);

Product Get(string name);

void Add(Product product);

List<Product> Query(ProductQueryFilter filter);
}
}


数据实现

namespace MEFDemo.Domain1.DataAccess
{
[VersionExport(typeof(IProductDA), "1.0")]
public class ProductDA : IProductDA
{
private static List<Product> Data = new List<Product>
{
new Product{ProductId=1,ProductName="A"},
new Product{ProductId=2,ProductName="B"},
new Product{ProductId=3,ProductName="C"},
};

public Product Get(int id)
{
return Data.FirstOrDefault<Product>(p => p.ProductId == id);
}
public Product Get(string name)
{
return Data.FirstOrDefault<Product>(p => p.ProductName == name);
}
public void Add(Product product)
{
Data.Add(product);
}

public List<Product> Query(ProductQueryFilter filter)
{
return Data.Where<Product>(p => p.ProductName == filter.ProductName).ToList();
}
}
}
...全文
6859 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
蜗蜗蜗蜗蜗牛 2016-11-24
  • 打赏
  • 举报
回复
顶贴!学习!
fushuai_fs 2016-04-19
  • 打赏
  • 举报
回复
学习
X_SpringSun 2014-04-11
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
aday 2014-03-24
  • 打赏
  • 举报
回复
观摩大师的框架和代码
forlan824 2014-03-20
  • 打赏
  • 举报
回复
不明觉厉啊 辛苦了大神
jy251 2014-03-19
  • 打赏
  • 举报
回复
不明觉厉,死活搞不懂WCF的人帮你顶一下
风一样的大叔 2014-03-19
  • 打赏
  • 举报
回复
引用 5 楼 Net_Java_dram 的回复:
[quote=引用 4 楼 qiujialongjjj 的回复:] 楼主移到webservice版吧,我把你推荐
需要重新编辑?我没权限[/quote] 管理菜单-》移动-》webservice版
黄瓜黄瓜 2014-03-19
  • 打赏
  • 举报
回复
引用 4 楼 qiujialongjjj 的回复:
楼主移到webservice版吧,我把你推荐
需要重新编辑?我没权限
风一样的大叔 2014-03-19
  • 打赏
  • 举报
回复
楼主移到webservice版吧,我把你推荐
灬浪子灬 2014-03-19
  • 打赏
  • 举报
回复
的说法发个 2014-03-19
  • 打赏
  • 举报
回复
TRYHRTHRTGHTR
的说法发个 2014-03-19
  • 打赏
  • 举报
回复
个人烦人烦人粉饿
宝_爸 2014-03-19
  • 打赏
  • 举报
回复
感谢lz分享。 我现在也更倾向于使用更简单的asp.net MVC web api了。
bat9856 2014-03-19
  • 打赏
  • 举报
回复
vbfool 2014-03-19
  • 打赏
  • 举报
回复
WCF本来就适合搞IoC,配合MEF确实是不错的选择。

12,162

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧