Kısmen MVC'ye yeniden yazılmış eski bir Web.Forms uygulamasına sahibim. MVC parçası, bir bağımlılık enjeksiyon kabı olarak autofac kullanır.Autofac, MVC (ActionFilters ile), Web.Forms - bağımlılık çözünürlüğü çakışma
MVC kısmı özel filtre tanımlanmıştır: Web.Forms entegrasyon web.config'de devre dışı zaman iyi çalışır
public class CustomActionFilter : ActionFilterAttribute
{
protected ILogger Logger { get; set; }
public CustomActionFilter(ILogger logger) { Logger = logger; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
Logger.Log("OnActionExecuting");
}
}
. Hovewer, Web.Forms autofac entegrasyonunu kullanmaya çalıştığımda, autofac internals (stack trace) 'da bir yerde AutofacFilterProvider
ile ilgili NullReferenceException var.
- Global.asax.cs: http://pastebin.com/437Tnp0t
- web.config: http://pastebin.com/5pU6SH6c
CustomActionFilter
böylece AutoFac ile kaydedilir, küresel filtre olarak kayıtlı Not olduğunu
:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(DependencyResolver.Current.GetService<CustomActionFilter>());
}
}
Denedim:
-
Aynı sonuç
- Kullanım mülkiyet enjeksiyon yerine yapıcı - - Ayrı MVC için kaplar ve Web.Forms kullanılarak
- aynı sonucu
- Açıkça web.forms sayfalarında bağımlılıkları çözünürlüğü tetiklemek (gibi this) -
çalıştı Yani, soru, hem de MVC ve web.forms bölümünün arkasındaki sahne bağımlılık çözünürlüğü sağlamak için herhangi bir yolu vardır. Autofac ve yeni bağımlılık enjeksiyon kaplarına yeni bir şekilde yeniyim, bu yüzden bariz bir şeyi özlüyorum.
Güncelleme: hata özel filtreleri ile ilgisi yok. Tüm süzgeçleri özel filtrelere kaldırırsam, hata davranışı hala yığın izlemesiyle aynı olur.
? Autofac.MVC, istek sırasında yaratılan Lifetimscope'u içeren yeni bir 'RequestLifetimeHttpModule 'içerdiğinden,' ContainerDisposalModule 'gerekli olmamalıdır. – nemesv
@nemesv aynı sonuç. – J0HN
Tamam, şimdi sorunun ne olduğunu görüyorum ... 'InstancePerHttpRequest' ile kayıtlı hizmetleriniz var mı? – nemesv