Tôi muốn thêm một phần mở rộng hành vi để các lớp dịch vụ của tôi sẽ được khởi tạo với Ninject. Tôi tạo ra một lớp kế thừa từ BehaviorExtensionElement và đăng ký nó trong App.config của tôi. Tôi không thể nhìn thấy bất cứ điều gì rõ ràng tôi là thiếu, nhưng khi khởi động này được ném:Thêm một phần mở rộng hành vi tùy chỉnh wcf gây ra một ConfigurationErrorsException
System.Configuration.ConfigurationErrorsException: An error occurred creating the configuration section handler for system.serviceModel/behaviors: Extension element TestExtension cannot be added to this element. Verify that the extension is registered in the extension collection at system.serviceModel/extensions/behaviorExtensions.
Parameter name: element (...\MyAssembly.dll.config line 42) --->
System.ArgumentException: Extension element TestExtension cannot be added to this element.
Verify that the extension is registered in the extension collection at system.serviceModel/extensions/behaviorExtensions.
Parameter name: element
Đây là App.config của tôi:
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="TestExtension" type="Mynamespace.DependencyInjectionServiceBehavior,MyAssembly,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null" />
</behaviorExtensions>
</extensions>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<TestExtension/>
</behavior>
</serviceBehaviors>
</behaviors>
Đây là lớp hành vi của tôi:
public class DependencyInjectionServiceBehavior : BehaviorExtensionElement, IServiceBehavior
{
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
foreach (ChannelDispatcherBase cdb in serviceHostBase.ChannelDispatchers)
{
ChannelDispatcher cd = cdb as ChannelDispatcher;
if (cd != null)
{
foreach (EndpointDispatcher ed in cd.Endpoints)
{
ed.DispatchRuntime.InstanceProvider =
new DependencyInjectionInstanceProvider(serviceDescription.ServiceType);
}
}
}
}
public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
}
public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase,
Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
{
}
public override Type BehaviorType
{
get { return this.GetType(); }
}
protected override object CreateBehavior()
{
return new DependencyInjectionServiceBehavior();
}
}
bất kỳ giải pháp nào ?? – Kiquenet
Chính xác những gì tôi cần biết để khắc phục sự cố của mình - cảm ơn bạn – stuartd
Sử dụng Trình chỉnh sửa cấu hình dịch vụ WCF để thêm tiện ích mở rộng hành vi sẽ cho phép bạn duyệt tệp DLL và lớp bên trong và sẽ thêm thông tin thích hợp vào tệp cấu hình của bạn tốt. Chỉ là một lựa chọn khác có thể dễ dàng hơn đối với một số người! –