Ho iniziato a lavorare su un nuovo progetto e provengo da una programmazione diretta e "ingenua".Implementazione iniezione dipendenza Autofac
In questo momento, mi preoccupo dell'utilizzo del contenitore IoC, in particolare del diagramma di distribuzione delle dipendenze con Autofac.
Diciamo che ho una semplice fabbrica di sessione:
namespace Warehouse.Data
{
public class SessionFactory
{
private static ISessionFactory _sessionFactory;
private static ISystemSetting _systemSetting;
SessionFactory(ISystemSetting systemSetting)
{
_systemSetting = systemSetting;
InitializeSessionFactory();
}
private static void InitializeSessionFactory()
{
_sessionFactory = Fluently.Configure()
.Database(DatabaseConfiguration)
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<MyMap>())
.BuildSessionFactory();
}
public static ISession OpenSession()
{
return _sessionFactory.OpenSession();
}
}
}
E in Bootstrap.cs, ho configurare autofac come questo:
namespace Warehouse.Infrastructure
{
using Autofac;
public class Bootstrap
{
public IContainer Configure()
{
var builder = new ContainerBuilder();
builder.RegisterType<SystemSetting>().As<ISystemSetting>();
builder.RegisterType<UserRepository>().As<IUserRepository>();
return builder.Build();
}
}
}
mia domanda è questa:
- Come posso utilizzare Autofac per risolvere la dipendenza SessionFactory da ISystemSetting? Devo usare
builder.Resolve<ISystemSetting>
come parametro ogni volta che voglio usare SessionFactory? - Il pattern di iniezione delle dipendenze, o forse solo Autofac, include molte nuove parole come Service, Resolve, Singleton, ecc. Dove posso imparare queste cose da zero? È lo stesso per ogni altro DI Framework?
- Ho bisogno di capire come IoC Container funziona in un progetto con più livelli, ogni livello ha bisogno di un riferimento a Autofac?
Grazie.
quello che non capisco nel tuo esempio, è il vostro SessionFactory, perché contiene anche una "statica ISessionFactory _sessionFactory;". quindi incapsuli una sessionfactory in una factory di sessione? mi sembra che tu voglia fare una sessione di classe. – Egi