SORU
8 ŞUBAT 2011, Salı


Nasıl Ninject veya Dİ ASP.NET Web Formları üzerinde uygulayabilir miyim?

MVC bir uygulama üzerinde çalışmış olmak için çok örnek var. Web Formları nasıl yapılır?

CEVAP
25 Mayıs 2011, ÇARŞAMBA


Burada WebForms ile Ninject kullanmak için gereken adımları.

Adım 1 - İndir

İki indirme - Ninject-2.0.0.0-release-net-3.5 ve web formunu uzantıları Ninject.Web_1.0.0.0_With.log4net (NLog bir alternatif yok) gerekli.

Dosyaları web uygulamasında başvurulacak gereken şu: Ninject.dll, Ninject.Web.dll, Ninject.Extensions.Logging.dll ve Ninject.Extensions.Logging.Log4net.dll.

Adım 2 - Küresel.asax

Küresel sınıf Ninject.Web.NinjectHttpApplication türetmek gerekiyor ve kapsayıcı yaratır CreateKernel(), uygulamak:

using Ninject; using Ninject.Web;

namespace Company.Web {
    public class Global : NinjectHttpApplication


        protected override IKernel CreateKernel()
        {
            IKernel kernel = new StandardKernel(new YourWebModule());
            return kernel;
        }

StandardKernel kurucu Module alır.

3 - Modül Adım

Bu Modül, bu durumda* *10, web uygulama tüm bağlantıları tanımlar:

using Ninject;
using Ninject.Web;

namespace Company.Web
{
    public class YourWebModule : Ninject.Modules.NinjectModule
    {

        public override void Load()
        {
            Bind<ICustomerRepository>().To<CustomerRepository>();
        }   

ICustomerRepository arabirim beton başvurulan her yerde bu örnekte, CustomerRepository kullanılacaktır.

Adım 4 - Sayfaları

Ninject.Web.PageBase miras için her sayfa, ihtiyaçları bitince:

  using Ninject;
    using Ninject.Web;
    namespace Company.Web
    {
        public partial class Default : PageBase
        {
            [Inject]
            public ICustomerRepository CustomerRepo { get; set; }

            protected void Page_Load(object sender, EventArgs e)
            {
                Customer customer = CustomerRepo.GetCustomerFor(int customerID);
            }

InjectAttribute -[Inject] - Ninject CustomerRepo Özelliği ICustomerRepository enjekte etmek için söyler.

Eğer zaten temel bir sayfa varsa sadece Ninject türetme Ana Sayfa almak gerekir.Web.PageBase.

5 - Ana Sayfa Adım

Kaçınılmaz olarak, ana sayfalar ve bir Anasayfa enjekte nesneleri erişmek için izin vermek için Ninject.Web.MasterPageBase Ana Sayfa türetmek gerekir:

using Ninject;
using Ninject.Web;

namespace Company.Web
{
    public partial class Site : MasterPageBase
    {

        #region Properties

        [Inject]
        public IInventoryRepository InventoryRepo { get; set; }     

6 - Statik Web Hizmeti Yöntemleri Adım

Bir sonraki sorun mümkün statik yöntemler içine enjekte ediliyordu. Standart bir web hizmet yöntemleri taşımak zorunda kaldım açıkçası statik olan birkaç Ajax bir PageMethods, yaşadık. Yine, web hizmeti Ninject bir sınıftan - Ninject.Web.WebServiceBase türetmek gerekiyor:

using Ninject;
using Ninject.Web;    
namespace Company.Web.Services
{

    [WebService(Namespace = "//tempuri.org/">http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]    
    [System.Web.Script.Services.ScriptService]
    public class YourWebService : WebServiceBase
    {

        #region Properties

        [Inject]
        public ICountbackRepository CountbackRepo { get; set; }

        #endregion

        [WebMethod]
        public Productivity GetProductivity(int userID)
        {
            CountbackService _countbackService =
                new CountbackService(CountbackRepo, ListRepo, LoggerRepo);

JavaScript PageMethods.GetProductivity(user, onSuccess) yerine standart hizmet Company.Web.Services.YourWebService.GetProductivity(user, onSuccess), başvurmak gerekir.

Bulduğum tek sorun Kullanıcı Denetimleri içine enjekte eden nesneler. Mümkün Ninject yetenekleri ile kendi temel UserControl oluşturmak için olsa da, daha hızlı kullanıcı gerekli nesne için kontrol ve konteyner sayfasında bu Özelliği ayarlamak için bir Özellik eklemek için buldum. Kutudan destekleyen UserControls, Ninject "yapılacaklar" listesi. bence

Ekleme Ninject oldukça basit ve güzel konuşan IoC bir çözümdür. Birçok insan Xml yapılandırma yok çünkü. ""Sadece Ninject sözdizimi ile Tekiz dönüşüyor nesneleri gibi - Bind<ILogger>().To<WebLogger>().InSingletonScope(). diğer yararlı hileler vardır Gerçek Tek bir implmentation içine WebLogger değiştirmeye gerek yok, bu hoşuma gidiyor.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Floortile83

    Floortile83

    16 Ocak 2010
  • george sarintzotis

    george sarin

    2 Aralık 2007
  • psidot

    psidot

    2 Kasım 2006