Tôi đang cố gắng tự động đặt thuộc tính trên bất kỳ bộ điều khiển nào xuất phát từ lớp BaseController
của tôi. Đây là mã trong phương thức Application_Start
của tôi. Các tài sản UnitOfWork
luôn luôn là null khi tôi cố gắng và truy cập nó.Tiêm tài sản cho Bộ điều khiển cơ sở Lớp
var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterType<VesteraTechnologiesContext>().As<IContext>();
builder.RegisterType<UnitOfWork>().As<IUnitOfWork>();
builder.RegisterType<BaseController>()
.OnActivated(c => c.Instance.UnitOfWork = c.Context.Resolve<IUnitOfWork>());
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
Dưới đây là những gì trông giống như BaseController
public class BaseController : Controller
{
public IUnitOfWork UnitOfWork { get; set; }
}
Lý do tôi đang cố gắng để thực hiện điều này thông qua một tài sản thay vì trên thông qua một constructor là vì vậy mà tôi không cần phải lặp lại trong các nhà xây dựng trong mọi bộ điều khiển cần quyền truy cập vào thuộc tính UnitOfWork
, vì các hàm tạo không được kế thừa.
Cảm ơn bạn nemesv, điều này làm việc hoàn hảo. –
@nemesv cảm ơn mẹo. Bạn có biết rằng nếu điều này có bất kỳ tác động perf? – tugberk
@tugberk Tôi đã không sử dụng PropertiesAutowired trong môi trường sản xuất nên tôi không biết tác động của nó đến mức nào. Nó sử dụng sự phản chiếu để tìm ra các thuộc tính có thể định cư công cộng để nó có ít nhất các chi phí phản chiếu thông thường. – nemesv