Tôi đang cố gắng thiết lập setter/thuộc tính tiêm cho dự án MVC của tôi bằng cách sử dụng StructureMap, nhưng tôi dường như không thể làm cho nó thiết lập các thuộc tính. Tôi nhận thức rõ rằng việc tiêm Constructor là thực hành được khuyến nghị, nhưng tôi có một yêu cầu nghiêm ngặt yêu cầu chúng tôi thực hiện nó bằng cách sử dụng tiêm setter, vì vậy hãy giữ các bình luận cố gắng nói với tôi bằng cách khác.StructureMap Setter Injection không thiết lập thuộc tính
Tôi có đoạn code cài đặt soạn bình thường như sau trong Global.asax của tôi
ControllerBuilder.Current.SetControllerFactory(new TestControllerFactory());
ObjectFactory.Initialize(x => {
x.For<IPaymentService>().Use<PaymentService>();
x.ForConcreteType<HomeController>().Configure.Setter<IPaymentService>(y => y.PaymentService).IsTheDefault();
x.SetAllProperties(y =>
{
y.OfType<IPaymentService>();
});
});
TestControllerFactory của tôi trông giống như sau:
public class TestControllerFactory:System.Web.Mvc.DefaultControllerFactory
{
protected IController GetControllerInstance(Type controllerType)
{
if (controllerType == null)
throw new ArgumentNullException("controllerType");
return ObjectFactory.GetInstance(controllerType) as IController ;
}
}
tôi có Dịch vụ/Thực hiện cặp lớp sau
public interface IPaymentService
{
}
public class PaymentService:IPaymentService
{
}
Và cuối cùng, tôi có bộ điều khiển của mình l có tài sản mà cần phải có việc thực hiện dịch vụ thanh toán cụ thể tiêm vào nó:
public class HomeController: Bộ điều khiển { công cộng Dịch vụ IPaymentService {get; set;}
public ActionResult Index(){
var test = Service... //Service is Null
}
}
Hiển thị ở trên, thuộc tính vẫn giữ nguyên khi tôi gỡ lỗi.
Ngoài ra, tôi đã thử sử dụng [SetterProperty] chỉ để xem nếu nó hoạt động (tôi không có ý định kết nối bộ điều khiển của tôi với các thuộc tính), và nó vẫn không hoạt động.
Tôi không chắc mình có cần làm gì khác không, hoặc vấn đề có thể là gì. Tôi đã được sử dụng tiêm constructor với StructureMap cho một thời gian.
Bạn có bất kỳ may mắn với setter injection? Tôi đang thử trên bộ lọc hành động nhưng nó dường như không hoạt động. – ntombela
Sau khi đấu tranh để làm việc với tiêm setter, tôi quyết định di chuyển ra khỏi nó. – Joel