Tôi muốn tiêm một thực hiện giao diện của tôi trong WCF nhưng tôi muốn khởi tạo container Dependency Injection của tôi trong Client của WCF. Vì vậy, tôi có thể có một triển khai khác nhau cho từng khách hàng của dịch vụ của tôi.Dependency Injection wcf
Trả lời
Khi bạn sử dụng svcutil.exe hoặc Thêm dịch vụ tham khảo thuật sĩ trong Visual Studio, một trong nhiều loại tự động tạo ra sẽ là một giao diện khách hàng. Hãy gọi nó là IMyService
. Cũng sẽ có một giao diện được tạo tự động khác được gọi là được gọi là IMyServiceChannel
triển khai IMyService và IDisposable. Sử dụng sự trừu tượng này trong phần còn lại của ứng dụng khách của bạn.
Vì bạn muốn để có thể tạo ra một kênh mới và đóng nó lại một lần nữa, bạn có thể giới thiệu một Factory Tóm tắt:
public interface IMyServiceFactory
{
IMyServiceChannel CreateChannel();
}
Trong phần còn lại của ứng dụng khách hàng của bạn, bạn có thể tham gia một sự phụ thuộc vào IMyServiceFactory:
public class MyClient
{
private readonly IMyServiceFactory factory;
public MyClient(IMyServiceFactory factory)
{
if (factory == null)
{
throw new ArgumentNullException("factory");
}
this.factory = factory;
}
// Use the WCF proxy
public string Foo(string bar)
{
using(var proxy = this.factory.CreateChannel())
{
return proxy.Foo(bar);
}
}
}
Bạn có thể tạo ra một thực hiện cụ thể của IMyServiceFactory rằng kết thúc tốt đẹp WCF của ChannelFactory<T>
như một thực hiện:
public MyServiceFactory : IMyServiceFactory
{
public IMServiceChannel CreateChannel()
{
return new ChannelFactory<IMyServiceChannel>().CreateChannel();
}
}
Bây giờ bạn có thể định cấu hình DI Container của mình bằng cách ánh xạ IMyServiceFactory thành MyServiceFactory. Dưới đây là cách thực hiện trong Castle Windsor:
container.Register(Component
.For<IMyServiceFactory>()
.ImplementedBy<MyServiceFactory>());
Thông tin bổ sung: Đây là how to wire up a WCF service with a DI Container.
Dưới đây là những gì tôi hiểu từ câu hỏi của bạn:
Bạn có một giao diện mà không liên quan đến WCF. Hãy gọi nó là IInterface
Bạn có ứng dụng khách WCF đã sử dụng dịch vụ. Hãy gọi hợp đồng dịch vụ: IService
bạn muốn lớp ServiceClient theo mặc định triển khai IService khi bạn thêm tham chiếu dịch vụ cũng để triển khai IInterface.
Nếu đây là trường hợp, bạn có thể sử dụng thực tế là lớp ServiceClient được đánh dấu là một phần.
Chỉ cần thực hiện khai báo một phần khác cho ServiceClient và thêm giao diện bạn cần (Bạn phải đảm bảo rằng các không gian tên bằng nhau cho mã được tạo tự động và mã của bạn). Hình ảnh trông giống như sau:
namespace [ServiceClient Namespace]
{
public partial class ServiceClient : IInterface
{
}
}
Hy vọng điều đó sẽ hữu ích.
- 1. Sử dụng Unity Dependency Injection với các dịch vụ WCF
- 2. Unity Dependency Injection cho các dịch vụ WCF
- 3. Android và Dependency Injection
- 4. Groovy Dependency Injection
- 5. ASMX Dependency Injection và IoC
- 6. Automapper cùng với Dependency Injection
- 7. Tùy chỉnh ResourceProviderFactory Dependency Injection
- 8. Dependency Injection container - Factory Pattern
- 9. Symfony 2 Dependency Injection & autowiring
- 10. Dependency Injection & Spring Framework là gì?
- 11. Inversion of Control <Dependency Injection
- 12. Xuân Dependency Injection vào đậu serializable
- 13. Dependency Injection Thực hành tốt nhất
- 14. Injection Dependency Spring và Plugin Jar
- 15. Sử dụng Reader Monad for Dependency Injection
- 16. Dependency Injection và phát triển năng suất
- 17. ASP.NET MVC: HTTPContext và Dependency Injection
- 18. Thực hành Singleton & Dependency Injection question
- 19. Tạo một AntiForgeryToken thông qua Dependency Injection
- 20. Dependency Injection Container vs Mẫu đăng ký
- 21. Dependency Injection & sử dụng giao diện?
- 22. Khi nào sử dụng Dependency Injection
- 23. Ninject dependency injection với Decorator pattern
- 24. Hiểu IoC Container và Dependency Injection
- 25. Dependency Injection in .NET với các ví dụ?
- 26. toàn cầu Nhà nước và Singletons Dependency Injection
- 27. Dependency Injection với một logger tĩnh, tĩnh helper class
- 28. Constructor Dependency Injection trong một điều khiển ASP.NET MVC
- 29. Dependency Injection bên trong Excel VSTO và Ninject.Extensions.Factory
- 30. Thiết kế một gói Nuget với Dependency Injection
Ok, nhưng Làm cách nào để tiêm dịch vụ thực hiện tùy chỉnh một lớp học? Ví dụ: giao diện công cộng ISendMail {seng (chuỗi chủ đề, chuỗi tin nhắn, chuỗi đến); }. Tôi muốn thực hiện một lớp khác nhau cho mỗi khách hàng và trong khách hàng tôi tiêm thực hiện này trong WCF Service. Tks –
Mã có thể không thể hiện sự phức tạp về chu kỳ hoặc từ thông báo khác, nhưng những gì tôi biết là, được lấy ở dạng hiện tại, điều này đòi hỏi rất nhiều thứ nếu bạn có nhiều dịch vụ mà bạn quan tâm. đòi hỏi một cách tiếp cận chung chung hơn để có giá trị trong các dự án lớn hơn, IMO. – brumScouse
Bạn tiếp tục sử dụng từ đó. Tôi không nghĩ rằng nó có nghĩa là những gì bạn nghĩ rằng nó có nghĩa là. –