2012-01-24 16 views
7

NuGet'ten StructureMap'i ASP.NET MVC3 projeme yüklediğimde Dave Ebbo'nun WebActivator paketinin bağımlı olarak eklendiğini fark ettim.Hangi PreApplicationStartMethod kullanmalıyım?

WebActivator zaman yüklemek eklenen Demirbaş kodunda, bir PreApplicationStartMethod niteliğini sağlar ve, bunun yerine bu iç Global.asax 'ın Application_Start yöntemi yapmanın da kendi sınıfında IoC kapsayıcı ve bağımlılık çözücü başlatmak için kullanılır.

ASP.NET 4 zaten sahip olduğu göz önüne alındığında kendisine ait System.Web.PreApplicationStartMethodAttribute neden arzın kendi sürümüne için WebActivator için gerekli ve StructureMap bu kullanmak içindi?

ben WebActivator en varyantını kullanmak değil yapmak tahmin ediyorum? Darin için

Eklendi kodu: ASP.NET MVC 3 DI kapları için

using System.Web; 
using System.Web.Mvc; 
using StructureMap; 

[assembly: WebActivator.PreApplicationStartMethod(
        typeof(MyMvcApp.App_Start.StructuremapMvc), "Start")] 
// or 

[assembly: PreApplicationStartMethod(
        typeof(MyMvcApp.App_Start.StructuremapMvc), "Start")] 

namespace MyMvcApp.App_Start { 
    public static class StructuremapMvc { 
    public static void Start() { 
     var container = (IContainer) IoC.Initialize(); 
     DependencyResolver.SetResolver(new SmDependencyResolver(container)); 
    } 
    } 
} 

cevap

5

Nuget paketleri genellikle Application_Start bulunabilecek mevcut kodu ile karıştırmasını önlemek için WebActivator kullanmayı tercih ediyorum. Ninject tam olarak aynı yaklaşımı kullanır.

Sen WebActivator.PreApplicationStartMethod birden uygulamanızda özelliklerini ve tek System.Web.PreApplicationStartMethodAttribute .NET 4.5 için önce sahip olabilir.

+0

Bunu tamamen anlıyorum, ancak StructureMap'in neden "System.Web.PreApplicationStartMethodAttribute" sağlanan ASP.NET 4 üzerinden 'WebActivator.PreApplicationStartMethodAttribute' kullanmayı tercih ettiğini merak ediyorum. – Kev

+1

@Kev, uygulama başına tek bir "System.Web.PreApplicationStartMethodAttribute" sahibi olabileceğinizden ve StructureMap onu kullanmış olsaydı, artık kendi özel başlatmalarınızı sağlayamayacaksınız. "WebActivator.PreApplicationStartMethod", yerleşik ASP.NET 4.0 özniteliğinden daha ayrıntılıdır. Bu ona dayanır ama tüm 'WebActivator.PreApplicationStartMethod' kayıt olmak ve hepsini çalıştırmak için yansıma kullanır. Bu nedenle, NuGet paketleri bu yaklaşımı kullanır. Yerleşik yöntemi kaçırmamak için. –

+0

Evet, ama biraz loş kestiriyorsam beni affet, StructureMap aslında * onu kullanmıyor * başka bir başlatma kodu eklenemez. Soruma eklediğim kodu görün. Başka bir StructureMap işlevi olmayan 'Başlat()' için başka bir başlatma kodu ekleyebilirim. – Kev

İlgili konular