私はBaseController
クラスから派生した任意のコントローラのプロパティを自動的に設定しようとしています。ここに私のApplication_Start
メソッドのコードです。 UnitOfWork
プロパティは、アクセスしようとすると常にnullです。ここでベースコントローラクラスのプロパティ注入
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));
BaseControllerは、私は、コンストラクタを複製する必要がないように、私はコンストラクタで代わりにプロパティを経由して、これをやろうとしている理由がある
public class BaseController : Controller
{
public IUnitOfWork UnitOfWork { get; set; }
}
次のようになりますUnitOfWork
プロパティへのアクセスが必要なすべてのコントローラで、コンストラクタは継承されないためです。
nemesvありがとうございました。これは完全に機能しました。 –
@nemesvチップのおかげで。これにパーフォーマンスがあれば分かりますか? – tugberk
@tugberkプロダクション環境でPropertiesAutowiredを使用していないので、どれくらいのパフォーマンスに影響があるか分かりません。これは、リフレクションを使用してパブリックな設定可能プロパティを検索し、少なくとも通常のリフレクションコストを持つようにします。 – nemesv