/// <summary>
/// IOC实例提供者,基于AutoFac
///
/// </summary>
public class IocInstanceProvider : IInstanceProvider
{
Type serviceType;
IContainer container; public IocInstanceProvider(Type serviceType)
{
this.serviceType = serviceType;
container = RegisterDependency();
}
private IContainer RegisterDependency()
{
var builder = new ContainerBuilder(); builder.RegisterType(Service1).InstancePerLifetimeScope(); //配置外部接口
builder.RegisterType<Test>().As<ITest>().SingleInstance();
return builder.Build();
} public object GetInstance(InstanceContext instanceContext, Message message)
{
return container.Resolve(serviceType);
} public object GetInstance(InstanceContext instanceContext)
{
return GetInstance(instanceContext, null);
} public void ReleaseInstance(InstanceContext instanceContext, object instance)
{
if (instance is IDisposable)
((IDisposable)instance).Dispose();
}
}
/// <summary>
/// 使用IOC必须加上的特性,只能在实现类上使用
///
/// </summary>
public class IocServiceBehavior : Attribute, IServiceBehavior
{
public void AddBindingParameters(ServiceDescription serviceDescription
, ServiceHostBase serviceHostBase
, Collection<ServiceEndpoint> endpoints
, BindingParameterCollection bindingParameters)
{ } public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
foreach (ChannelDispatcher item in serviceHostBase.ChannelDispatchers)
{
foreach (var ed in item.Endpoints)
{
if (!ed.IsSystemEndpoint)
{
ed.DispatchRuntime.InstanceProvider = new IocInstanceProvider(serviceDescription.ServiceType);
}
}
}
} public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
}
}

使用:

[IocServiceBehavior]
public class Service1:IService1{ //methods
}

最新文章

  1. cat命令使用
  2. C语言 活动安排问题之二
  3. Java 005 枚举
  4. Hello Mybatis 03 数据关联
  5. AFNetworking 提示&quot;The resource could not be loaded because the App Transport Security policy requires the use of a secure connection&quot; 解决办法
  6. Microsoft.Jet.OLEDB.4.0和Microsoft.ACE.OLEDB.12.0的区别
  7. Message Decoding
  8. 中断服务程序不用interrupt关键字也可实现中断,该关键字是否必须?
  9. 大约C++ const 全面总结
  10. Frameset框架集的应用
  11. MYSQL Optimizing LIMIT Queries
  12. MySQL数据库基础(三)(操作数据表中的记录)
  13. Latex &quot;Error: Extra alignment tab has been changed to \cr. &quot;
  14. 软件工程(FZU2015) 赛季得分榜,第9回合
  15. codeforces 412div.2
  16. Centos7服务器中安装MySQL(选择一个你想要的版本)
  17. Win10+Ubuntu 二三事
  18. Java 可执行jar的manifest编写
  19. shell中参数的传递
  20. Git -- 相关命令

热门文章

  1. Luogu 3369 我用线段树骗了一道平衡树题……
  2. 远程桌面(RDP)上的渗透测试技巧和防御
  3. 在OpenShift上托管web.py应用
  4. Android Studio添加文件注释头模板?
  5. fzyzojP2291 -- 小添添的庄园之道路修复
  6. 洛谷P4382 劈配
  7. PHP获取图片主题颜色
  8. SPSS数据类型:测量字段、角色字段
  9. pymc
  10. 科学计算三维可视化---Mlab基础(常用控制函数)