Я использую Autofac в проекте и пытаюсь сделать это правильно.Итак, я читал документацию и нашел Owned<T>
.Кажется, что это правильный тип отношений, который нужно использовать, когда я хочу что-то распоряжаться собой - например, DbContext
, который одноразовый.
Так что я изменил все свои введенные фабрики Func<DbContext>
на Func<Owned<DbContext>>
.
Единственное, что он чувствует себя немного грязным, как Lazy<T>
подобное поведение, и помещает Owned в использование и в зависимости от типа не фреймворка ...
Это неправильно, не использоватьOwned
вообще?
Есть ли проблема в удалении экземпляров, которые не принадлежат моему классу, как этот?
public class MyClass
{
private readonly Func<DbContext> _dbcFactory;
private MyClass(Func<DbContext> dbcFactory)
{
_dbcFactory = dbcFactory; // nullcheck etc;
}
private void TheMethodWhoUpdate(String newName)
{
using(var dbc = _dbcFactory())
{
var ent = dbc.Table.Single(x => x.id == 3);
end.Name = newName;
dbc.SaveChanges();
}
}
}
Что я смог вообразить (потому что я не могу найти подсказки в документах) это может привести к некоторой проблеме с производительностью, потому что, возможно, autofac отследит созданный экземпляр DbContext и попытается снова его утилизировать, потеряв некоторое время (возможно, очень маленькое) ... Но, возможно, я ошибаюсь, и мне следуетпридерживайтесь направляющей .