최근 솔루션을 만들었고 종속성 주입을 처리하기 위해 DryIoC 컨테이너를 시험해 볼 것이라고 생각했습니다. 자, 내가 사용한 많은 다른 DI 솔루션과 마찬가지로 객체 재사용의 기본 범위는 transient입니다. 그러나 이것은 참조 된 클래스가 IDisposable을 구현하는 경우 DryIoC (및 많은 다른 솔루션)가 바인딩을 일시적으로 등록 할 수 없기 때문에 제가 사용하고있는 저장소 패턴의 구현에 문제가되는 것으로 보입니다. 결과적으로, 나는 Reuse.Singleton으로 내 저장소를 등록하는 데 일시적으로 의지했습니다. 이것은 분명히 저를위한 코드 냄새입니다. 누군가가 이런 상황을 피하는 방법에 대해 조언을 해주기를 바랬습니다. 예를 들어 리포지토리를 만드는 일이 좋지 않을 수도 있습니다.의존성 주입을 사용할 때 싱글 톤 저장소 (DryIoc) 피하기
public interface IRepository<T>
{
void Insert(T objectToInsert);
void Delete(int id);
void Update(T objectToUpdate);
void Save();
T GetById(long id);
IEnumerable<T> Get();
T Last();
bool Exists(int id);
}
public class MailMessageRepository : IRepository<tblMailMessage>, IDisposable
{
private bool _disposed;
private readonly CoreDataModel _model;
public MailMessageRepository()
{
_model = new CoreDataModel();
}
public void Delete(int id)
{
var objectToDelete = _model.tblMailMessages.Find(id);
if (objectToDelete != null) _model.tblMailMessages.Remove(objectToDelete);
}
public void Update(tblMailMessage objectToUpdate) => _model.Entry(objectToUpdate).State = EntityState.Modified;
public void Save() => _model.SaveChanges();
public IEnumerable<tblMailMessage> Get() => _model.tblMailMessages.ToList();
public tblMailMessage Last() => _model.tblMailMessages.OrderByDescending(x => x.DateSubmitted).FirstOrDefault();
public bool Exists(int id) => _model.tblMailMessages.SingleOrDefault(x => x.MailMessageID == id) != null;
public void Insert(tblMailMessage objectToInsert) => _model.tblMailMessages.Add(objectToInsert);
public tblMailMessage GetById(long id) => _model.tblMailMessages.SingleOrDefault(x => x.MailMessageID == id);
#region Dispose
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
if (!disposing)
{
_model.Dispose();
}
}
_disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
#endregion
}
정보를 제공해 주셔서 감사합니다. DI 컨테이너의 몇 가지 예를 제공 할 수 있습니까? DryIoC를 사용하는 이유는 성능이 뛰어나고 기능 요구 사항을 충족시키기 때문입니다. – spuriousGeek
[여기] (https://github.com/danielpalme/IocPerformance)의 .NET 컨테이너 목록이 있지만 성능은 거의 어떤 컨테이너를 사용하는 것이 가장 좋은 방법인지 알 수 있습니다. 대부분은 비슷한 기능을 가지고 있습니다. 사용자의 요구에 맞는 적극적으로 지원되는 기능을 찾는 것입니다. – NightOwl888