Rozpocząłem pracę nad nowym projektem i pochodzę z bezpośredniego i "naiwnego" programowania.Implementacja wtrysku zależności Autofac
W tej chwili mam zamiar używać kontenera IoC, a konkretnie tupu Dependency Injection, używając Autofac.
Powiedzmy mam proste fabryki sesji:
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();
}
}
}
I Bootstrap.cs, skonfigurować autofac tak:
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();
}
}
}
Moje pytanie jest takie:
- Jak używać Autofac do rozwiązywania zależności SessionFactory od ISystemSetting? Czy muszę używać parametru
builder.Resolve<ISystemSetting>
jako parametru za każdym razem, gdy chcę korzystać z SessionFactory? - Wzorzec zależności Dependency Injection, a może po prostu Autofac, zawiera wiele nowych słów, takich jak Service, Resolve, Singleton itp. Gdzie mogę nauczyć się tych rzeczy od zera? Czy jest tak samo w przypadku wszystkich innych struktur DI?
- Muszę zrozumieć, w jaki sposób IoC Container działa w projekcie z wieloma warstwami, czy każda warstwa wymaga odniesienia do Autofac?
Dziękuję.
co ja nie rozumiem w przykładzie, to SessionFactory, ponieważ zawiera również „statyczny ISessionFactory _sessionFactory;”. więc obudowujesz środowisko sesji w fabryce sesji? wydaje mi się, że chcesz zrobić zajęcia sesyjne. – Egi