C# 使用Unity扩展ASP.NETMVC3中的接口
我有一个相当复杂的MVC3多国web应用程序。因此,有操作和服务方法可用于多个甚至所有衍生web应用程序,其他方法是特定于国家的。C# 使用Unity扩展ASP.NETMVC3中的接口,c#,asp.net-mvc-3,inheritance,dependency-injection,unity-container,C#,Asp.net Mvc 3,Inheritance,Dependency Injection,Unity Container,我有一个相当复杂的MVC3多国web应用程序。因此,有操作和服务方法可用于多个甚至所有衍生web应用程序,其他方法是特定于国家的。 我已经可以通过继承创建特定于国家的行动: namespace MyWebApp.Controllers.General { // general HomeController; can be used for all countries public class HomeController : Controller { pr
我已经可以通过继承创建特定于国家的行动:
namespace MyWebApp.Controllers.General
{
// general HomeController; can be used for all countries
public class HomeController : Controller
{
protected IService _service;
public HomeController(IService service)
{
_service = service;
}
public ActionResult Index()
{
MyViewModel viewModel = _service.DoSomethingGeneral();
return View(viewModel);
}
}
}
这是常用的家庭控制器。我现在有了一个特定国家应该使用的行动:
namespace MyWebApp.Controllers.CountryA
{
// country specific HomeController inherits from general HomeController
public class HomeController : MyWebApp.Controllers.General.HomeController
{
public HomeController(IService service)
: base(service)
{
}
public ActionResult CountryASpecificView()
{
MyCountryAViewModel viewModel = _service.DoSomethingCountryASpecific();
return View(viewModel);
}
}
}
因此,在我的国家一个网络应用程序中,我可以同时使用操作Index()
和countryAspecicView
。顺便说一下,我必须在global.asax
中操作路由,通过发布名称空间来实现这种继承。我正在使用Unity构造函数注入来创建服务方法 现在的问题是如何扩展服务接口
iSeries设备
,使我的常规HomeController
无法使用方法DoSomethingCountryASpecific()
,但CountryA的HomeController
可以使用?很明显,我可以将方法
DoSomethingCountryASpecific()
添加到另一个接口中,但出于某些原因,我宁愿不添加
我目前的做法是:
namespace MyWebApp.Services.Interfaces
{
public interface IService
{
MyViewModel DoSomethingGeneral();
MyCountryAViewModel DoSomethingCountryASpecific();
}
}
namespace MyWebApp.Services.General
{
public class MyGeneralService : IService
{
public MyViewModel DoSomethingGeneral()
{
MyViewModel viewModel = new MyViewModel();
// do something with the view model
return viewModel;
}
public MyCountryAViewModel DoSomethingCountryASpecific()
{
throw new NotImplementedException("Can be used for CountryA only.");
}
}
}
namespace MyWebApp.Services.CountryA
{
public class MyCountryAService : MyGeneralService
{
public MyCountryAViewModel DoSomethingCountryASpecific()
{
MyCountryAViewModel viewModel = new MyCountryAViewModel();
// do something with the view model
return viewModel;
}
}
}
我不喜欢它
我不喜欢一般服务类中的抛出
,我也不喜欢一般服务类知道MyCountryViewModel
。实际上,MyGeneralService
不应该知道任何关于某个国家的事情。顺便说一句,我可以在
global.asax中操纵Unity来使用myCountryService
而不是MyGeneralService
我希望我的问题是可以理解的,并且有人有一些想法。
干杯西蒙创建特定于国家/地区的界面有什么问题?似乎是最合乎逻辑和最干净的解决方案。我真的在考虑这个问题,但由于它非常复杂,有很多服务接口和服务方法,我不想拥有更多。服务的主题也是一样的。假设您有IStoreService
和IStoreService countrya
。似乎除了使用特定于国家/地区的接口之外,没有其他可能性。所以我是这样认识的。