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
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.
Nasıl değişmez bir " baskı miyim;{}&qu...
Nasıl nrepl-ritz-jack-in yapmak işe uz...
Nasıl bir farklı işlemeye git bir şube...
Nasıl bir dizin C veya C kullanarak do...
Nasıl Java UTC veya GMT geçerli tarih ...