Итак, я начинаю использовать Ninject для внедрения зависимостей, и мне интересно, что люди думают об использовании ядра в качестве фабрики объектов для объектов типа Unit of Work, таких как Linq2Sql Datacontexts. Я бы просто внедрил их как обычные зависимости, но это приводит к некоторым проблемам времени жизни объекта, которых я бы хотел избежать. DataContexts отличаются от общих зависимостей, потому что вы должны раскручивать новые экземпляры по мере необходимости и избавляться от них, когда закончите.
Чтобы сделать что-то подобное, я бы просто настроил провайдера, например ...
class SomeDataContextProvider : Provider<SomeDataContext>
{
private static string _connectionString = "someConnectionString"
protected override SomeDataContext CreateInstance(IContext context)
{
return new SomeDataContext(_connectionString);
}
}
Свяжите их в модуле ...
class MyModule : Ninject.Modules.NinjectModule
{
public override void Load()
{
Bind<SomeDataContext>().ToProvider(SomeDataContextProvider);
}
}
И при необходимости используйте стандартное ядро ...
class MyClassThatNeedsADataContext
{
private StandardKernel _kernel = new StandardKernel(new MyModule());
public void SomeMethod()
{
using (var db = _kernel.Get<SomeDataContext>())
{
//Use the context
}
}
}
Это кажется немного тяжелым для того, что по сути является статической фабрикой, но я все равно использую Ninject для других вещей. Мне нравится, что он дает членам команды соглашение для фабрик, вместо того, чтобы просто позволять им использовать его (создавая кучу разных фабричных классов в странных местах или просто помещая статические методы в объекты и т. Д.).
Мысли? Есть ли лучший способ справиться с зависимостями Unit of work, такими как DataContexts или WCF Service Clients, используя внедрение зависимостей?