я нашел следующий код в Simple Injector WebsiteКак зарегистрировать одноразовый конкретный тип в простом Injector контейнере
public static void RegisterDisposableTransient<TService, TImplementation>(
this Container container)
where TImplementation : class, IDisposable, TService
where TService : class
{
var scoped = Lifestyle.Scoped;
var reg = Lifestyle.Transient.CreateRegistration<TService, TImplementation>(
container);
reg.SuppressDiagnosticWarning(DiagnosticType.DisposableTransientComponent,
"suppressed.");
container.AddRegistration(typeof(TService), reg);
container.RegisterInitializer<TImplementation>(
o => scoped.RegisterForDisposal(container, o));
}
Я хочу зарегистрировать конкретную реализацию (тот, который не реализует какой-либо конкретный интерфейс), который является одноразовой для переходный объем. Какие изменения мне нужно сделать, чтобы код выше
Последняя строка ('scoped.RegisterForDisposal') бросает исключение. Можно ли удалить эту финальную строку? Все дело в том, что это предполагалось не охваченным, но временным, что бросает, однако, если тип сервиса (TConcrete) реализует IDisposable. Идея здесь заключается в том, что пользователь обрабатывает удаление, что особенно необходимо в консольном приложении или веб-службе. Альтернативой является то, что мы должны ссылаться на сам контейнер, чтобы называть BeginScope и т. Д., Но для этого требуется ссылка на контейнер во всем приложении! Большие нет, когда мы можем распоряжаться, являются нашими собственными объектами. Спасибо за любую обратную связь. –
Btw, @ (превосходная) документация Стивена охватывает эту проблему [здесь] (http://simpleinjector.readthedocs.io/en/latest/disposabletransientcomponent.html), но так же, используя область действия в последней строке, когда Я думал, что все дело в том, что он регистрируется как временный, т. Е. Там, где не должно быть управления обработкой области. Вся проблема часто не имеет области действия (так что последняя строка генерирует исключение). Цель регистрации переходного процесса - это когда мы сами обрабатываем удаление. –
Ваш проект вызывает некоторые вопросы для меня, поэтому было бы полезно опубликовать новый вопрос, объясняющий, что вы делаете, какой вид одноразового объекта и как приложение взаимодействует с ним. Это позволяет мне дать более конкретный ответ. Кроме того, интересно увидеть детали исключения. – Steven