我正試圖爲Ravendb實現IoC(Ninject),並且遇到了一點小麻煩。我使用http://www.dotnetguy.co.uk/post/2010/06/12/raven-db-ndash-part-1-ndash-documentsession-per-request-with-structuremap的代碼提供幫助。需要幫助獲取Ninject等效的StructureMap語法
public interface IRavenSessionFactoryBuilder
{
IRavenSessionFactory GetSessionFactory();
}
public class RavenSessionFactoryBuilder : IRavenSessionFactoryBuilder
{
private IRavenSessionFactory _ravenSessionFactory;
public IRavenSessionFactory GetSessionFactory()
{
return _ravenSessionFactory ?? (_ravenSessionFactory = CreateSessionFactory());
}
private static IRavenSessionFactory CreateSessionFactory()
{
Debug.Write("IRavenSessionFactory Created");
return new RavenSessionFactory(new DocumentStore
{
Url =
System.Web.Configuration.WebConfigurationManager.AppSettings[
"Raven.DocumentStore"]
});
}
}
public interface IRavenSessionFactory
{
IDocumentSession CreateSession();
}
public class RavenSessionFactory : IRavenSessionFactory
{
private readonly IDocumentStore _documentStore;
public RavenSessionFactory(IDocumentStore documentStore)
{
if (_documentStore != null) return;
_documentStore = documentStore;
_documentStore.Initialize();
}
public IDocumentSession CreateSession()
{
Debug.Write("IDocumentSession Created");
return _documentStore.OpenSession();
}
}
我不確定如何轉換以下結構映射語法。
ObjectFactory.Configure(x => x.For<IDocumentSession>()
.HybridHttpOrThreadLocalScoped()
.AddInstances(inst => inst.ConstructedBy
(context => context.GetInstance<IRavenSessionFactoryBuilder>()
.GetSessionFactory().CreateSession())));
在我的嘗試中,_ravenSessionFactory因爲新的構造函數而在每個請求上都爲null。
Bind<IDocumentSession>().ToMethod(
x => new RavenSessionFactoryBuilder().GetSessionFactory().CreateSession()).RequestScope();
感謝任何花時間嘗試和幫助解釋的人。
我擺脫了我的界限,並添加了你提到的2行。我現在得到一個錯誤「錯誤激活IDocumentSession。沒有匹配的綁定可用,並且類型不可自行綁定....」 – Ryan 2011-04-05 23:08:02
這隻意味着您需要爲'IDocumentSession'添加一個綁定,例如'Bind < IDocumentSession>()。到();'你更近了一步。 –
neontapir
2011-04-06 03:48:58
現在我越來越接近了。我有與IDatabaseCommands相同的錯誤。似乎沒有什麼東西想與它綁定。 http://pastebin.com/U2qyf51m – Ryan 2011-04-06 11:59:55