Estoy tratando de establecer automáticamente una propiedad en cualquier controlador que se deriva de mi clase BaseController
. Aquí está el código en mi método Application_Start
. La propiedad UnitOfWork
siempre es nula cuando intento acceder a ella.Inyección de propiedad para la clase de controlador base
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));
Aquí es lo que el BaseController parece
public class BaseController : Controller
{
public IUnitOfWork UnitOfWork { get; set; }
}
La razón por la que estoy tratando de hacerlo a través de una propiedad en lugar de a través de un constructor es por lo que yo no tengo que duplicar el constructor en cada controlador que necesita acceso a la propiedad UnitOfWork
, ya que los constructores no se heredan.
Gracias nemesv, esto funcionó a la perfección. –
@nemesv gracias por la sugerencia. ¿Sabes que si esto tiene algún impacto en el rendimiento? – tugberk
@tugberk No he usado PropertiesAutowired en un entorno de producción, así que no sé cuánto impacto tiene. Utiliza la reflexión para encontrar las propiedades configurables públicas, por lo que tiene al menos los costos de reflexión habituales. – nemesv