2012-04-23 41 views
18

Bất kỳ ví dụ nào tốt về việc sử dụng Ninject với Dịch vụ Windows? Tôi không chắc chắn nếu tôi cần bất kỳ tiện ích mở rộng nào. Ngoài ra, không chắc chắn về Root Root phải là gì? Bất kỳ ví dụ tốt nào về việc sử dụng Ninject với dịch vụ Windows không?Sử dụng Ninject với Dịch vụ Windows

Trả lời

19

Dịch vụ cửa sổ không khác nhiều so với ứng dụng dòng lệnh thông thường liên quan đến việc tiêm phụ thuộc. Chân thành phần thẳng về phía trước là phương pháp Main của bạn.

Cách tôi thường làm là tạo StandardKernel ở đó với mô-đun trong đó phụ thuộc của tôi được giải quyết. Sau đó sử dụng kernel.Get để giải quyết sự phụ thuộc cấp cao nhất - tất cả mọi thứ khác sẽ theo sau từ đó:

static void Main(string[] args) 
{ 
    var kernel = new StandardKernel(new FooModule()); 
    var barDependency = kernel.Get<Bar>(); 

    System.ServiceProcess.ServiceBase[] ServicesToRun; 
    ServicesToRun = new ServiceBase[] { new FooService(barDependency) }; 
    System.ServiceProcess.ServiceBase.Run(ServicesToRun); 
} 
+1

Microsoft có cách để đưa các mô-đun Ninject (hoặc hạt nhân) lên cao hơn để bạn không phải thực hiện bất kỳ dịch vụ định vị nào không? (không phải là một vấn đề lớn đối với chỉ một vài phụ thuộc - chỉ tò mò) –

+0

Không. Không phải là bạn đang bắt đầu lên giống như một ứng dụng giao diện điều khiển. Bạn có thể thực hiện phương pháp tiếp cận mẫu nhà máy trừu tượng (hoặc phương pháp nhà máy) để tạo dịch vụ của mình, nếu bạn cần làm như vậy. –

+0

Dan, phương pháp chính là điểm bắt đầu. Các giải pháp cho các ứng dụng web vv thực sự là giải pháp vì một ứng dụng web không có một điểm khởi đầu tốt. –

1

Sử dụng Ninject với TopShelf .. chạy vs cài đặt (bắt đầu) tôi phải đối mặt với một vấn đề xa lạ nơi > MyService.exe run hoạt động tốt với mã Kernel.Bind(handlers => { var bindings = handlers.From("abc.dll") ... }

Nhưng khi tôi bắt đầu dịch vụ sau khi cài đặt sử dụng > MyService.exe install

nó không thể giải quyết các ràng buộc nêu tại quét lắp ráp Ninject.

Sau một vài giờ phá vỡ đầu tôi ...

thay đổi .From(...)-.FromAssembliesMatching(...) tôi có thể bắt đầu dịch vụ thành công.

Hy vọng nó sẽ giúp ai đó.

Các vấn đề liên quan