,我有我已經張貼在這裏
public class MefDataServiceHostFactory : DataServiceHostFactory
{
protected override ServiceHost CreateServiceHost(
Type serviceType, Uri[] baseAddresses)
{
ServiceHost host = base.CreateServiceHost(serviceType, baseAddresses);
host.Description.Behaviors.Add(new MefServiceBehavior());
return host;
}
}
public class MefInstanceProvider : IInstanceProvider
{
#region fields
private readonly Type _serviceType;
private IDependencyScope _diScope;
#endregion
#region ctor
public MefInstanceProvider(Type serviceType)
{
_serviceType = serviceType;
}
#endregion
public object GetInstance(InstanceContext instanceContext)
{
return GetInstance(instanceContext, null);
}
這裏來,其中一個可使用MEF或重要部分工作解決方案什麼是IOC。
public object GetInstance(InstanceContext instanceContext, Message message)
{
_diScope = GlobalConfiguration.Configuration.DependencyResolver.BeginScope();
return _diScope.GetService(_serviceType);
}
public void ReleaseInstance(InstanceContext instanceContext, object instance)
{
if (_diScope != null) _diScope.Dispose();
}
}
獲取一個新的實例和處置要求
public class MefServiceBehavior : IServiceBehavior
{
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
foreach (ChannelDispatcherBase cdb in serviceHostBase.ChannelDispatchers)
{
var cd = cdb as ChannelDispatcher;
if (cd != null)
{
foreach (EndpointDispatcher ed in cd.Endpoints)
{
ed.DispatchRuntime.InstanceProvider = new MefInstanceProvider(serviceDescription.ServiceType);
}
}
}
}
public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase,
Collection<ServiceEndpoint> endpoints,
BindingParameterCollection bindingParameters)
{
}
public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
}
}
註冊自定義工廠在SVC文件
<%@ServiceHost Service="DataService"
Factory="MefDataServiceHostFactory"
language=c# Debug="true" %>
或添加新的服務途徑。
routes.Add(new ServiceRoute(string.Empty, new MefDataServiceHostFactory(), typeof (DataService)));
快樂編碼!