注册具有优先权的开放式泛型

Chr*_*eis 3 .net inversion-of-control unity-container open-generics

有可能像这样使用统一:

container.Register(typeof(IMyType<car>), typeof(MyType1<car>));
container.Register(typeof(IMyType<>), typeof(MyType2<>));
Run Code Online (Sandbox Code Playgroud)

..所以,当我试图解决时,IMyType<car>我得到了MyType1<car>......但是当我试着解决时,IMyType<bus>我得到了MyType2<bus>?或者也许是另一种方法来做同样的事情,以便定义的泛型优先于开放的泛型?

Ste*_*kes 6

是的,你可以做到这一点:

IUnityContainer container = new UnityContainer();

container.RegisterType(typeof(IMyType<Car>), typeof(MyType1<Car>));
container.RegisterType(typeof(IMyType<>), typeof(MyType2<>));

// Returns MyType1<Car>:
IMyType<Car> car = container.Resolve<IMyType<Car>>();

// Returns MyType2<Bus>:
IMyType<Bus> bus = container.Resolve<IMyType<Bus>>();
Run Code Online (Sandbox Code Playgroud)