Próbuję automatycznie ustawić właściwość na dowolnym kontrolerze, który wywodzi się z mojej klasy BaseController
. Oto kod w mojej metodzie Application_Start
. Właściwość UnitOfWork
jest zawsze pusta, gdy próbuję uzyskać do niej dostęp.Właściwość wtrysku dla kontrolera podstawowego Klasa
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));
Oto co BaseController wygląda
public class BaseController : Controller
{
public IUnitOfWork UnitOfWork { get; set; }
}
Powodem Próbuję to zrobić za pośrednictwem nieruchomości zamiast na przez konstruktora jest tak, że nie trzeba powielać konstruktora w każdym kontrolerze, który potrzebuje dostępu do właściwości UnitOfWork
, ponieważ konstruktory nie są dziedziczone.
Dziękuję nemesv, to działało idealnie. –
@nemesv dzięki za cynk. Czy wiesz, że jeśli ma to jakiś wpływ? – tugberk
@tugberk Nie użyłem WłaściwościAutowired w środowisku produkcyjnym, więc nie wiem ile ma to wpływu na perfekcję. Korzysta z refleksji, aby znaleźć publicznie możliwe do ustawienia właściwości, tak więc ma co najmniej typowe koszty refleksji. – nemesv