在ASP.NET中实现多态依赖注入模式的一种常见方法是使用接口和反射。以下是一个示例:
假设我们有一个接口IService
:
public interface IService
{
void DoSomething();
}
我们有两个类实现它:
public class Service1 : IService
{
public void DoSomething()
{
Console.WriteLine("Service1 is doing something.");
}
}
public class Service2 : IService
{
public void DoSomething()
{
Console.WriteLine("Service2 is doing something.");
}
}
现在我们可以创建一个带有IService
参数的类Controller
:
public class Controller
{
private readonly IService _service;
public Controller(IService service)
{
_service = service;
}
public void Run()
{
_service.DoSomething();
}
}
在需要使用Controller
的地方,我们可以使用反射来创建Controller
的实例,并使用适当的IService
实现来填充它。
假设我们需要在某个页面中使用Controller
。我们可以在代码中创建一个工厂,根据需要创建Controller
的实例:
public class ServiceFactory
{
public static IService CreateService()
{
// return either Service1 or Service2 based on some logic
}
}
public class Page
{
protected void Page_Load(object sender, EventArgs e)
{
var service = ServiceFactory.CreateService();
var controller = Activator.CreateInstance(typeof(Controller), service) as Controller;
controller.Run();
}
}
这样做的好处是,我们可以轻松地将IService
的实现替换为另一个实现,而无需更改Controller
类或依赖它的其他类。但是,这种方法需要使用反射,可能会影响性能。