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