代码之家  ›  专栏  ›  技术社区  ›  TMan

如何使用SimpleIOC注册通用存储库

  •  1
  • TMan  · 技术社区  · 12 年前

    如何向SimpleIOC注册通用存储库?

      public interface IRepository<T>
      {
    
      }
    
      public class Repository<T> : IRepository<T>
      {
    
      }
    
      SimpleIoc.Default.Register<IRepository, Repository>(); //Doesn't work, throws error
    
    
     Error  1   Using the generic type 'AdminApp.Repository.IRepository<TModel>' requires 1 type arguments  C:\Application Development\AdminApp\AdminApp.Desktop\ViewModel\ViewModelLocator.cs  55  44  AdminApp.Desktop
    

    我也试过:

        SimpleIoc.Default.Register<IRepository<>, Repository<>>(); //Doesn't work either
         Error  1   Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement   C:\Application Development\AdminApp\AdminApp.Desktop\ViewModel\ViewModelLocator.cs  55  17  AdminApp.Desktop
    
    1 回复  |  直到 12 年前
        1
  •  4
  •   Emmanuel    4 年前

    我不相信 GalaSoft.MvvmLight.Ioc.SimpleIoc ( source code )支架 开放泛型 实现。您需要创建封闭的实现,并分别注册每个实现:

    public interface IRepository<T> where T : class { }
    
    public class A { }
    public class B { }
    
    public class RepositoryA : IRepository<A> { }
    public class RepositoryB : IRepository<B> { }
    
    SimpleIoc.Default.Register<IRepository<A>, RepositoryA>();
    SimpleIoc.Default.Register<IRepository<B>, RepositoryB>();
    

    我建议你考虑搬到一个更成熟的图书馆,比如 SimpleInjector 它对仿制药有着广泛的支持。

    SimpleInjector的代码简单如下:

    container.RegisterOpenGeneric(typeof(IRepository<>), typeof(Repository<>));
    
    推荐文章