2016-03-27 20 views
0

StructureMap ile bir OrmLite temel IoC oluşturmak istiyorum ancak yanlış bir şey yapıyorum. OrmLite'ı StructureMap ile ayarlama

container.Register<IDbConnectionFactory>(c => 
    OrmLiteConnectionFactory(":memory:", SqliteDialect.Provider)); //InMemory Sqlite DB 

Yani StructureMap ile benim yeni oluşturulan WebAPI2 uygulamasında kullanmak istiyorum: OrmLite yerinde anda

onlar bunu enjekte nasıl basit bir örnek vermek.

Ben StructureMap.WebAPI2 Nuget yüklü ve ben şu yapılandırmaya sahip:

container.Configure(x => { 
     x.For<IAuthenticationService>().Use<AuthenticationService>(); 

     x.For<IDbConnectionFactory>() 
        .Use<OrmLiteConnectionFactory>().Ctor<string>("connectionString").Is("Server=(localdb)\v11.0;Integrated Security=true;") 
        .Ctor<IOrmLiteDialectProvider>("dialectProvider").Is(SqlServerOrmLiteDialectProvider.Instance); 
    }); 

Ve bu senaryoda IAuthenticationServer normalde instanced ediliyor. i DbConnection erişmeye çalıştığınızda Ama enjekte değil ve ben db erişmeye çalışıyorum yolu Yani

public IDbConnectionFactory DbFactory { get; set; } //injected by IOC 

    IDbConnection db; 
    IDbConnection Db 
    { 
     get 
     { 
      return db ?? (db = DbFactory.Open()); 
     } 
    } 

boş bulunuyor. Ve getter DbFactory'de null. Bunu nasıl düzeltebilirim?

cevap

1

StructureMap otomatik olarak seter enjeksiyonu yapmaz (bilinçli tasarıma göre). IDbConnection öğesinin yapıcı işleviyle (tercih edilen) enjekte edilmesi için sınıfınızı değiştirin ya da setter enjeksiyonu nasıl kullanacağınızı görmek için bunu kontrol edin./StructureMap: http://structuremap.github.io/setter-injection/

İlgili konular