由于我不知道如何在 DI 注册级别实现延迟加载,所以我经常使用这种方式来延迟加载服务。我会和你分享我的方法。
每个服务接口都将继承 IService 接口,该接口是所有服务接口的基础。
public interface IService
{
// I just want to be sure I'm instantiating ONLY services types.
// This is my base interface
}
public interface IMyService : IService
{
void DoSomeWork();
}
然后,每个服务都会实现自己的接口:
public class MyService : IMyService
{
public void DoSomeWork()
{
// Some action performed.
}
}
我的抽象 BaseController 类实现了这个逻辑
public abstract class BaseController : Controller
{
public T LoadService<T>() where T : IService
{
return (T)System.Web.Http.GlobalConfiguration.Configuration.DependencyResolver.GetService(typeof(T));
}
}
最后,在我继承 BaseController 的控制器中,我可以做到这一点:
public class TestController : BaseController
{
// Only parameterless constructor exists created by the compiler.
[HttpPost]
public ActionResult PerformWork()
{
var testService = LoadService<IMyService>();
testService.DoSomeWork();
return View();
}
}
我很想看到延迟加载服务的更好实现,或者了解如何使用 Unity 或 Ninject 在类型注册级别实现延迟加载。