2011-11-01 15 views
0

Castle Winsor 2.5.0.1をWCF with IIS(Windows XP/Windows 2008)と統合しようとしています。私はCastle Windsor 3.0.0だけがCaste.Facilities.WCFIntegrationでうまく動作することがわかります。私は文字通りWCF + Castle 2.5.0.1を行う方法を見つけるために私の髪を引き出しています。私は実際の例を見つけるためにたくさんのグーグルで検索しましたが、失敗しました。私を案内してください。Castle Windsor 2.5.0.1と統合されたWCFの使い方

答えて

0

あなたがこれを行うことができます:

のweb.config WCFの設定:

<behaviors> 
    <serviceBehaviors> 

    <behavior name="defaultBehaviour"> 

     <createWithIoC /> 

    </behavior> 

    </serviceBehaviors> 
</behaviors> 

<extensions> 
    <behaviorExtensions> 
    <add 
     name="createWithIoC" 
     type="Namespace.CreateWithIocBehaviour, Assembly.Namespace" /> 
    </behaviorExtensions> 
</extensions> 


public class CreateWithIocBehaviour : BehaviorExtensionElement 
{ 
    protected override object CreateBehavior() 
    { 
     return new IocServiceProviderBehaviour(); 
    } 

    public override Type BehaviorType 
    { 
     get { return typeof(IocServiceProviderBehaviour); } 
    } 
} 

public class IocServiceProviderBehaviour : IServiceBehavior 
{ 
    public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase) 
    { 
    } 

    public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters) 
    { 
    } 

    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 IocServiceProvider(serviceDescription.ServiceType); 
       } 
      } 
     } 
    } 
} 

public class IocServiceProvider : IInstanceProvider 
{ 
    private readonly Type _serviceType; 

    public IocServiceProvider(Type serviceType) 
    { 
     _serviceType = serviceType; 
    } 

    public object GetInstance(InstanceContext instanceContext) 
    { 
     return GetInstance(instanceContext, null); 
    } 

    public object GetInstance(InstanceContext instanceContext, Message message) 
    { 
     return IoC.Resolve<object>(_serviceType); 
    } 

    public void ReleaseInstance(InstanceContext instanceContext, object instance) 
    { 
     IoC.Release(instance); 
    } 
} 
関連する問題