【问题标题】:Unity Container - Passing in T dynamically to the Resolve methodUnity Container - 将 T 动态传递给 Resolve 方法
【发布时间】:2010-11-10 08:42:35
【问题描述】:

我创建了一个我已经键入的 ISearchable 接口,以便我可以检索 T 的 IEnumerable 作为结果。

我有许多服务为不同的域对象实现 ISearchable ...

Container.RegisterType<ISearchable<Animal>, AnimalService>();
Container.RegisterType<ISearchable<Fish>, FishService>();

我想根据类型解析(通过 Unity)一个 ISearchable,但我正在努力让它工作......

以下内容无法编译,但希望能对我想要实现的目标有所了解。

Type t = typeof(Animal);
var searchProvider = _container.Resolve<ISearchable<t>>();

感谢您的帮助!

谢谢,

安迪

【问题讨论】:

    标签: c# inversion-of-control unity-container ioc-container


    【解决方案1】:

    终于整理好了,希望对大家有帮助!

    var type = filter.GetType();
    var genericType = typeof(ISearchable<>).MakeGenericType(type);
    var searchProvider = _unityContainer.Resolve(genericType);
    

    【讨论】:

      【解决方案2】:

      为什么不按名称注册您的类型并以这种方式解析?

      Container.RegisterType<ITelescopeView, TelescopeView>("type1");
      Container.RegisterType<ITelescopeView, TelescopeView2>("type2");
      
      Container.Resolve(ITelescopeView, "type1");
      

      如果您希望您的名称可以简单地是类型的全名,或者您可以使用其他名称。德米特里的方法也将奏效。但这可能会导致代码更清晰。

      【讨论】:

        【解决方案3】:

        怎么样...

        var sp = container.Resolve(
        Type.GetType("ISearchable`1[" + yourGenericTypeHere + "]"));
        

        【讨论】:

        • 感谢 Dmitri,尽管我希望有一个强类型的解决方案——如果有的话! :)
        猜你喜欢
        • 1970-01-01
        • 2010-11-20
        • 1970-01-01
        • 2010-10-21
        • 2015-12-31
        • 1970-01-01
        • 2021-04-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多