Tôi là người mới bắt đầu đấu tranh với IoC và DI. Tôi muốn để có thể giải quyết các kết nối và kết nối nhà máy tự động bằng cách sử dụng autofac (hoặc bất kỳ công cụ thích hợp khác.IoC, nhà máy và đối số hàm tạo
Một kịch bản có thể được thay đổi việc thực hiện kết nối với nhau với các cơ sở hơn trong việc tìm, vv
Khi tôi áp dụng DI và IoC vào mã dưới đây, tôi nhận được một mớ hỗn độn của namedParameter trong nhà thầu vv Nhà máy kết nối trả về kết nối mới với một cổng duy nhất (ví dụ ngớ ngẩn, chỉ để cho thấy tôi cần giữ một số trạng thái trong nhà máy)
Tôi có thể sử dụng tính năng tiêm cho IP và cổng, nhưng theo cách đó, tôi sẽ không được đảm bảo rằng các kết nối sẽ có một IP hoặc cổng, đó là điểm của một nhà xây dựng. Ngoài ra, các tham số được đặt tên cũng làm cho tôi phụ thuộc vào tên của các đối số.
Ý tưởng, mẫu, con trỏ IoC được đánh giá cao!
Cập nhật:
cụ thể hơn: Làm thế nào tôi có thể thay đổi các lớp kết nối được tiêm? Tôi có nên dùng thuốc tiêm không? Hoặc bất kỳ thủ thuật tôi có thể làm được một giải quyết an toàn hơn với các đối số constructor?
public interface IConnection {
void Open();
void Close();
string Execute(string command);
}
public interface IConnectionFactory {
IConnection CreateConnection();
}
public class Connection : IConnection {
...
public Connection(String ip, int port) {
_ip = ip;
_port = port;
}
public string Execute() {}
public void Open() {}
public void Close() {}
}
public class ConnectionFactory : IConnectionFactory {
//How would I resolve this?
public ConnectionFactory(string ip, int fromPort) {
...
}
public IConnection CreateConnection() {
//How would I resolve this?
return new Connection(ip, fromPort++);
}
}
Bây giờ, việc sử dụng:
//Register
builder.RegisterType<Connection>().As<IConnection>();
builder.RegisterType<ConnectionFactory>().As<IConnectionFactory>().SingleInstance();
...
var connection = container.Resolve<IConnectionFactory>(
new NamedParameter("ip", "127.0.0.1"),
new NamedParameter("fromPort", 80).CreateConnection());
Có lẽ bạn có thể muốn làm rõ câu hỏi/vấn đề thực tế của mình với mã ở trên hoặc cho dù bạn chỉ sau liên kết tài liệu/mẫu cho một khung công tác IoC cụ thể. – Reddog
Cảm ơn bạn đã bình luận, tôi đã cố gắng cụ thể hơn! – Larsbj
Tôi sẽ đi trước với tiêm tài sản và đầu tiên giải quyết các obect và sau đó vượt qua các thuộc tính. – sajoshi