Nói chung, tôi muốn giữ cho một ứng dụng hoàn toàn không biết gì về thùng chứa IoC. Tuy nhiên tôi đã gặp phải những vấn đề mà tôi cần truy cập vào nó. Để trừu tượng đi nỗi đau tôi sử dụng Singleton cơ bản. Trước khi bạn chạy cho những ngọn đồi hoặc kéo ra shotgun, hãy để tôi đi qua giải pháp của tôi. Về cơ bản, các singleton IoC không absolutly gì, nó chỉ đơn giản là đại biểu cho một giao diện nội bộ mà phải được thông qua in Tôi đã tìm thấy điều này làm cho làm việc với Singleton ít đau đớn.Tóm tắt IoC Container Đằng sau một Singleton - Làm sai?
Dưới đây là wrapper IoC:
public static class IoC
{
private static IDependencyResolver inner;
public static void InitWith(IDependencyResolver container)
{
inner = container;
}
/// <exception cref="InvalidOperationException">Container has not been initialized. Please supply an instance if IWindsorContainer.</exception>
public static T Resolve<T>()
{
if (inner == null)
throw new InvalidOperationException("Container has not been initialized. Please supply an instance if IWindsorContainer.");
return inner.Resolve<T>();
}
public static T[] ResolveAll<T>()
{
return inner.ResolveAll<T>();
}
}
IDependencyResolver:
public interface IDependencyResolver
{
T Resolve<T>();
T[] ResolveAll<T>();
}
tôi đã thành công rực rỡ cho đến nay với vài lần tôi đã sử dụng nó (có thể một lần mỗi vài dự án, Tôi thực sự không muốn sử dụng điều này chút nào) vì tôi có thể tiêm bất cứ thứ gì tôi muốn: Lâu đài, một Stub, hàng giả, v.v.
Đây có phải là con đường trơn không? Tôi sẽ chạy vào các vấn đề tiềm năng xuống đường?