MVC依赖解析程序条件



我正在使用依赖解析程序,并已将我的统一容器添加到该容器中。因此,默认情况下,"GoldCustomer"会根据当前容器规则注入到"CustomerController"中。

IUnityContainer oContainer = new UnityContainer();
oContainer.RegisterType<ICustomer, GoldCustomer>(); // injects GoldCustomer
DependencyResolver.SetResolver(new UnityDependencyResolver(oContainer));

如果我想按当前容器配置进行更改,我总是可以创建新的container并设置它,然后再次调用SetResolver。我知道上面的代码应该可以通过XML配置进行配置,但如果我们需要获取新的容器对象,我们仍然必须调用setresolver。

这是正确的方法吗?或者有更好的方法在应用程序运行时更改容器依赖性规则吗。

其次,我们可以更改容器的事件是session_start、httphandler或其他更好的事件。

首先,为什么需要多个容器?它必须是自应用程序启动以来注册所有依赖项的singleton对象。

在实践中,我会说保留单个容器,如果需要,在单独的程序集中创建多个Registration函数,并在AppBootstrapper中调用所有这些函数。

若它是一个应用程序,那个么最好的方法是使用异步行为启动应用程序,这样启动就不会受到影响。

==============================================

不幸的是,命名注册是唯一的选择,Unity需要明确注册名称。这就是为什么我个人喜欢像Autofac和SimpleInjector这样的DI容器。它们很快,允许多个类型的接口进行多次注册,解析程序使用类型解析程序和命名解析程序方法,而无需明确要求名称,这些解析程序也可重写。

我不知道为什么它在我看来没有那么复杂,如果我能很快理解这个问题,我可以按如下方式完成,

假设我有接口IMovieRepository和两个实现它的类EnglishMovieRepository和HindiMovieRepository。

如何解决他们在UnityConfig.cs如下,

    If(condition)
    {
         container.RegisterType<IMovieRepository, EnglishMovieRepository>();
    }
   else
   {
      container.RegisterType<IMovieRepository, HindiMovieRepository>();
   }

如果要求有所不同,请让我知道

谢谢/dj

最新更新