Tôi có một trình trang trí có một số phụ thuộc khác cũng nên được giải quyết bằng cách sử dụng vùng chứa. Ví dụ:Đăng ký trang trí trong autofac mà không cần chỉ định tất cả các phụ thuộc theo cách thủ công
public class FooDecorator : IFoo
{
public FooDecorator(IFoo inner, IBar bar, IBaz baz)
}
Tôi có thể đăng ký này như thế này:
builder.RegisterType<Foo>().As<IFoo>();
builder.RegisterDecorator<IFoo>((c, inner) =>
new FooDecorator(inner, c.Resolve<IBar>(), c.Resolve<IBaz>()), "key");
này đang làm việc, tuy nhiên không phải là tốt đẹp mà tôi phải tự xác định tất cả các phụ thuộc khác. Những gì tôi muốn làm là:
builder.RegisterDecorator<FooDecorator, IFoo>("key");
Trường hợp IFoo
được giải quyết cho 'nội' IFoo
và các phụ thuộc khác được giải quyết từ container. Điều này có thể, hoặc tôi có thể đăng ký một trang trí với một Func mà sẽ dẫn đến hành vi này?
Điều này thật tuyệt vời, nhưng nếu bạn không biết (hoặc quan tâm) rằng việc triển khai cụ thể của 'IFoo' là' Foo'? Có thể tuyên bố một cái gì đó dọc theo dòng "trang trí bất cứ điều gì hiện đang giải quyết để' IFoo' với 'FooDecorator'"? (giả sử IFoo đã được đăng ký trước để cung cấp 'IFoo', nhưng không nhất thiết phải là một dịch vụ _named_) - Tôi nghĩ đây là những gì OP đang tìm kiếm, quá –
@CristiDiaconescu không có giải pháp dễ dàng để làm điều này và không chỉ định trang trí đầu tiên, bạn sẽ có 2 đăng ký trong vùng chứa Autofac. Vui lòng đặt câu hỏi mới nếu bạn muốn biết thêm chi tiết về cách đạt được những gì bạn muốn. –