1

Unity では、ジェネリック インターフェイスをジェネリック実装に簡単にマップできるため、すべての ISomething に対して、SomethingImpl を 1 回の登録でマップできます。

var container = new UnityContainer();
//Map all generic repositories to their concrete generic implementations.
container.RegisterType(
                       typeof(IRepository<,>), 
                       typeof(Repository<,>)
                      ); 
var EmployeeRepository = container.Resolve<IRepository<Employee, int>>();

ムンクで同じことがどのように達成されるでしょうか?

4

2 に答える 2

1

次のようにオープン ジェネリックを Unity に登録できます。

container.RegisterType(typeof(IOpenGeneric<>), typeof(OpenGeneric<>));

次に、次のように解決できます。

IOpenGeneric<MyClass> value = container.Resolve<IOpenGeneric<MyClass>>();

あなたができないことは、「明白な」構文になるものを使用することです:

container.RegisterType<IOpenGeneric<T>,OpenGeneric<T>>() // SYNTAX ERROR!!
于 2016-06-28T08:39:03.017 に答える
-1

あなたは運が悪いです。次の 2 つのオプションがあります。

  1. すべてのタイプを明示的に登録します。

    container.Register<IRepository<int, User>, Repository<int, User>>();
    container.Register<IRepository<Guid, Order>, Repository<Guid, Order>>();
    container.Register<IRepository<long, OrderLine>, Repository<long, OrderLine>>();
    // etc
    

    痛みを少し軽減する便利なヘルパー メソッドをいつでも作成できます。

    public static void RegisterRepository<TKey, TEntity>(
        this Container container)
    {
        container.Register<IRepository<TKey, TEntity>, Repository<TKey, TEntity>();
    }
    
    container.RegisterRepository<int, User>>();
    container.RegisterRepository<Guid, Order>>();
    container.RegisterRepository<long, OrderLine>>();
    // etc
    
  2. オープン ジェネリックのサポートが組み込まれている別のコンテナーに切り替えます。これをサポートしている私が知っているコンテナーは、Autofac、StructureMap、Unity、Castle Windsor、Ninject、Simple Injector です。

于 2013-03-14T21:20:55.797 に答える