2012-01-13 15 views
20

Sử dụng SimpleIoc MVVM, tôi muốn đăng ký một thực hiện cho một giao diện nhất định, nhưng việc thực hiện đòi hỏi một tham số trong constructor của nó:MVVM SimpleIoc, làm thế nào để sử dụng một giao diện khi thực hiện giao diện đòi hỏi các thông số xây dựng

public class MyServiceImplementation : IMyService { 
    public MyServiceImplementation(string contructorString) { ... } 
} 

Tôi đã hy vọng rằng việc đăng ký thực hiện giao diện sẽ hoạt động, nhưng SimpleIoc không xem xét gợi ý khi nó cố gắng giải quyết giao diện.

SimpleIoc.Default.Register<MyServiceImplementation>(() => { 
    return new MyServiceImplementation("Hello World"); 
}); 

SimpleIoc.Default.Register<IMyService, MyServiceImplementation>(); 

Có cách nào để làm điều này với SimpleIoc hay tôi nên cân nhắc sử dụng Ioc hoàn chỉnh hơn?

Chỉnh sửa: Điều này thực hiện thủ thuật, nhưng tôi vẫn tự hỏi tại sao biểu mẫu ở trên không hiệu quả.

SimpleIoc.Default.Register<IMyService>(() => { 
    return new MyServiceImplementation("Hello World"); 
}); 

Trả lời

23

Lý do tại sao phương pháp đầu tiên của bạn không hoạt động là SimpleIOC không sử dụng chính nó để xây dựng các đối tượng.

Với tuyên bố của mình

SimpleIoc.Default.Register<MyServiceImplementation>(() => { 
    return new MyServiceImplementation("Hello World"); 
}); 

SimpleIoc.Default.Register<IMyService, MyServiceImplementation>(); 

Các cuộc gọi đến SimpleIoc.Default.GetInstance<MyServiceImplementation>() sẽ thực hiện các phương pháp nhà máy, trong khi cuộc gọi đến SimpleIoc.Default.GetInstance<IMyService>() sẽ không.

Một cách có thể chuỗi các cuộc gọi có thể để xác định một phương pháp nhà máy cho cả hai loại, IMyServiceMyServiceImplementation, ví dụ:

SimpleIoc.Default.Register<MyServiceImplementation>(() => { 
    return new MyServiceImplementation("Hello World"); 
}); 

SimpleIoc.Default.Register<IMyService>(() => { 
    return SimpleIoc.Default.GetInstance<MyServiceImplementation>(); 
}); 
+1

Cảm ơn @Obalix, đó là chắc chắn một workaround đẹp hơn của riêng tôi! –

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