2012-01-18 38 views
30

Nói, tôi có các lớp học như hệ thống cấp bậc:Ninject dependency injection với Decorator pattern

public interface IRepository { } 

public class SomeSimpleRepository : IRepository {} 

Bây giờ tôi muốn "trang trí" SomeSimpleRepository với chức năng bổ sung

public class MoreAdvancedRespository : IRepository 
{ 
    private readonly IRepository _originalRepository; 

    public MoreAdvancedRespository(IRepository original) 
    { } 
} 

Sau một thời gian nhau ..

public class TrickyRepository : IRepository 
{ 
    private readonly IRepository _originalRepository; 

    public TrickyRepository (IRepository original) 
    { } 
} 

Bây giờ, tôi cần hoàn thành ràng buộc. Trong ứng dụng tôi cần thể hiện của TrickyRepository, được khởi tạo với MoreAdvancedRespository. Vì vậy, tôi cần phải viết một cái gì đó như:

Bind<IRepository>().To<TrickyRepository>.With ?? 

Ở đây tôi đang bối rối, tôi cần bằng cách nào đó để nói, hãy MoreAdvancedRespository nhưng khởi tạo nó với SomeSimpleRepository. Đây là một loại chuỗi phụ thuộc mà phải được giải quyết dựa trên một giao diện.

Có ai có đề xuất về điều này không?

+1

bản sao có thể có của [Cách liên kết được thực hiện với trang trí bằng cách sử dụng Ninject?] (Http://stackoverflow.com/questions/8447037/how-the-binding-are-done-with-decorators-using-ninject) –

+2

Có thể trùng lặp của [Làm thế nào ràng buộc được thực hiện với trang trí bằng cách sử dụng Ninject?] (Https://stackoverflow.com/questions/8447037/how-the-binding-are-done-with-decorators-using-ninject) – NightOwl888

Trả lời

40

Sử dụng WhenInjectedInto:

Bind<IRepository>().To<MoreAdvancedRespository> 
        .WhenInjectedInto<TrickyRepository>(); 
Bind<IRepository>().To<SomeSimpleRepository> 
        .WhenInjectedInto<MoreAdvancedRespository>(); 

Xem this blog post để biết thêm.

+0

điều này là chính xác tôi cân gi –

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