3

MVC projelerinde, model binder tarafından oluşturulduğunda modele enjeksiyon hizmetleri eklemek için bağımlılık çözümleyicisini kullanan özel bir varsayılan model bağlayıcıya sahibim. Böylece, modelin içinde denetleyiciden uzak tutarak onaylama yapmak için bir üyelik servisi veya queryable oturumu olabilir.Model ciltleme sırasında Bağımlılığı Enjekte Etme microsoft web api

protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) 
    { 
     if (modelType.IsGenericType) 
      return base.CreateModel(controllerContext, bindingContext, modelType); 

     return _dependencyResolver.GetService(modelType); 
    }` 

Microsoft Web API'sinde bunu yapmanın bir yolu olup olmadığını merak ediyordum? IModelBinder geçersiz kılmak ve arama yapmak için bir CreateModel yöntemi sağlamaz, bunu yapmak için herhangi bir yol göremiyorum.

+0

ModelBinder örneğinize doğru bir hizmet enjekte etmek istiyorsunuz (belki de doğru okumuyorum)? ModelBinder'ınızın yapıcısına enjeksiyon yapmayı denediniz mi? Ayrıca hangi enjeksiyon çerçevesini kullandığınıza bağlı olabilir, bazıları da diğerlerinden daha sınırlıdır. – Igor

+0

Model ciltleyici bir model oluşturduğunda, gereken hizmetleri enjekte etmek istiyorum. UpdateUserModel (Isession session) olduğunu varsayalım. Model binder'in bunu enjekte etmesini istiyorum, böylece oturumu UpdateUserModel.Validate() yönteminde sorgulayabilirim. Çerçeveyi kullanarak binini kullan – Bonnotbh

+0

Sadece biraz arama yaptım ve modelin oluşturulduğu zamanda bunu yapmanın bir yolunu bulamıyorum. – Igor

cevap

0

Bonno, WebAPI, modeli belirli bir model türü kullandığınız sürece otomatik olarak çözer veya denetleyicide çözümlemeye çalışır. Varsayılan olarak Parameter Binding in ASP.NET Web API.

edin, Web API parametreleri bağlamak için aşağıdaki kuralları kullanır: parametre “basit” türüdür

, Web API URI'dan değerini geçmeye çalışır. Basit türler arasında .NET ilkel türleri (int, bool, çift, vb.), Artı TimeSpan, DateTime, Guid, ondalık, ve dize, artı bir dize dönüştürebilirsiniz bir tür dönüştürücü ile herhangi bir tür. (Daha sonra tür dönüştürücüler hakkında daha fazla bilgi.) Karmaşık türlerde Web API'si, ortam türünü biçimlendirici kullanarak ileti gövdesindeki değeri okumayı dener. Örneğin

: nakledilen json nesnesi SomeModelType için çözülebilir eğer

[Route("api/myApi")] 
public HttpStatusCode Post(SomeModelType modelObject) 
{ ... } 

, daha sonra SomeModelType bir örneği modelObject şeklinde oluşturulur.

Bütün mesele kendi bağımlılık çözümleyicinize ihtiyacınız olmamasıdır. Bununla birlikte, yine de neden olursa olsun, JToken parametre tipi herhangi bir nesneye sahip olacaktır. Nesneyi MVC'de olduğu gibi aynı şekilde serpmek ve işlemek sizin sorumluluğunuzda olacaktır.

DÜZENLEME


yorumlarınızı okuduktan sonra sana bağımlılık enjeksiyon bahsediyorduk fark etti. WebAPI parametrelerini çözme yolunda çalıştığı için, denetleyicilerinizin işlevlerine bağımlılıkları enjekte etmenizi önermemekteyim; denetleyiciniz, bağımlılıkların yapıcı tarafından veya başka bir şekilde enjekte edildiği bir sınıfı başlatmasını ve bağımlılık kabına/enjektörünüze O işi yap.