Sto tentando di impostare automaticamente una proprietà su qualsiasi controller che deriva dalla classe BaseController
. Ecco il codice nel mio metodo Application_Start
. La proprietà UnitOfWork
è sempre nullo quando provo ad accedervi.Proprietà dell'iniezione per controller di base Classe
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));
Ecco ciò che il BaseController assomiglia
public class BaseController : Controller
{
public IUnitOfWork UnitOfWork { get; set; }
}
La ragione per cui sto cercando di fare questo tramite una proprietà invece attraverso un costruttore è così che non ho duplicare il costruttore in ogni controller che necessita dell'accesso alla proprietà UnitOfWork
, poiché i costruttori non vengono ereditati.
Grazie nemesv, questo ha funzionato perfettamente. –
@nemesv grazie per il suggerimento. Sai che se questo ha un impatto perfetto? – tugberk
@tugberk Non ho usato PropertiesAutowired in un ambiente di produzione, quindi non so quanto abbia un impatto perfetto. Usa la riflessione per trovare le proprietà pubbliche impostabili in modo che abbia almeno i soliti costi di riflessione. – nemesv