2016-03-27 22 views
0

Ich möchte mit StructureMap einen grundlegenden IoC von Ormlite erstellen, aber ich mache etwas falsch.Einrichten von OrmLite mit StructureMap

Am Standort OrmLite sie geben ein einfaches Beispiel, wie es zu injizieren:

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

So will ich es mit StructureMap in meine neu erstellten WebAPI2 Anwendung verwenden.

Ich habe StructureMap.WebAPI2 nuget installiert und ich habe die folgende Konfiguration:

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); 
    }); 

Und in diesem Szenario IAuthenticationServer normalerweise instanziert wird. Aber wenn ich versuche, DbConnection zuzugreifen ist es nicht gespritzt und es ist null

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

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

Das ist die Art, wie ich versuche, db zuzugreifen. Und in Getter ist DbFactory null. Wie kann ich das beheben?

Antwort

1

StructureMap nicht automatisch Setter-Injektion (durch bewusstes Design), müssen Sie sich dafür entscheiden. Entweder ändern Sie Ihre Klasse, so dass IDbConnection über die Konstruktorfunktion (bevorzugt) injiziert wird, oder prüfen Sie, wie Sie die Setter-Injektion mit StructureMap verwenden: http://structuremap.github.io/setter-injection/