C# 使用Unity扩展ASP.NETMVC3中的接口

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

我有一个相当复杂的MVC3多国web应用程序。因此,有操作和服务方法可用于多个甚至所有衍生web应用程序,其他方法是特定于国家的。
我已经可以通过继承创建特定于国家的行动

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
。似乎除了使用特定于国家/地区的接口之外,没有其他可能性。所以我是这样认识的。