C# 如何使用vnext在类库中注册类型?

C# 如何使用vnext在类库中注册类型?,c#,dependency-injection,asp.net-core-mvc,dnx,C#,Dependency Injection,Asp.net Core Mvc,Dnx,有没有办法在dnx类库中为MVC6(vnext)应用程序注册类型(即存储库)?我不想在startup类中调用AddTransient()数百次。对于n层应用程序,这似乎不是最好的方法。基本IoC vNext使用没有扫描功能/批注册 在您的情况下,您应该使用一些“大”ioc容器,如Ninject、Unity、StructureMap…基本ioc vNext use没有扫描功能/批注册 在您的情况下,您应该使用一些“大”ioc容器,如Ninject、Unity、StructureMap…您可以使用与

有没有办法在dnx类库中为MVC6(vnext)应用程序注册类型(即存储库)?我不想在startup类中调用AddTransient()数百次。对于n层应用程序,这似乎不是最好的方法。

基本IoC vNext使用没有扫描功能/批注册


在您的情况下,您应该使用一些“大”ioc容器,如Ninject、Unity、StructureMap…

基本ioc vNext use没有扫描功能/批注册


在您的情况下,您应该使用一些“大”ioc容器,如Ninject、Unity、StructureMap…

您可以使用与框架其余部分相同的方法,即使用IServiceCollection上的扩展方法。例如,
AddMvc
AddEntityFramework
,等等

对于“自动”注册,没有现成的东西,但我构建了一个库,它为您提供了一个
[ServiceDescriptor]
属性,您可以使用该属性将接口绑定到类(或仅应用于类)

AddAssembly(…)
扩展方法只是浏览程序集以查找所有
[ServiceDescriptor]
属性,并将它们添加到服务集合中

然后,要使用它,您只需执行以下操作之一:

  • 像上面那样添加扩展方法,让扩展方法只调用
    services.AddAssembly(typeof(ExtensionClassInAssembly))

    我发现这是最简单的,它还允许您删除AddAssembly方法并用其他方法替换它,而无需更改主启动类

  • 向Startup.cs添加对
    services.AddAssembly(typeof(TypeInAssembly))
    的调用


  • 您可以使用与框架其余部分相同的方法对类库进行分类,即在
    IServiceCollection
    上使用扩展方法。例如,
    AddMvc
    AddEntityFramework
    ,等等

    对于“自动”注册,没有现成的东西,但我构建了一个库,它为您提供了一个
    [ServiceDescriptor]
    属性,您可以使用该属性将接口绑定到类(或仅应用于类)

    AddAssembly(…)
    扩展方法只是浏览程序集以查找所有
    [ServiceDescriptor]
    属性,并将它们添加到服务集合中

    然后,要使用它,您只需执行以下操作之一:

  • 像上面那样添加扩展方法,让扩展方法只调用
    services.AddAssembly(typeof(ExtensionClassInAssembly))

    我发现这是最简单的,它还允许您删除AddAssembly方法并用其他方法替换它,而无需更改主启动类

  • 向Startup.cs添加对
    services.AddAssembly(typeof(TypeInAssembly))
    的调用


  • 你说的“在dnx类库内”是什么意思?我喜欢将接口类型与对象类型的映射移动到我的类库中,以便有一个插件环境。你说的“在dnx类库内”是什么意思?我喜欢将接口类型与对象类型的映射移动到我的类库中,以便拥有一个插件环境。我也尝试过这样做,但我未能将依赖项从ILibraryManager加载到ContainerBuilder中,因为必须在LibraryManager初始化之前构建容器,我也尝试过这样做,但是我未能将依赖项从ILibraryManager加载到ContainerBuilder中,因为必须在LibraryManager初始化之前构建容器,这是个好主意,但看起来有点粗糙D我希望重用内置服务。我在这里提供了一个不起作用的例子:好主意,但看起来有点粗糙D我希望重用内置服务。我在此提供了一个不起作用的示例: