注册依赖Unity

时间:2017-10-16 12:20:18

标签: c# dependency-injection dependencies unity-container

我只是想问一下是否有办法以最简单的方式使用统一来注册依赖项。

    public class Module : IModule
    {
        IUnityContainer _container;
        IRegionManager _regionManager;

    public Module (IUnityContainer container, IRegionManager regionManager)
    {
        _container = container;
        _regionManager = regionManager;
    }

    public void initialize()
    {
      IRegion region = _regionManager.Regions[RegionNames.ContentRegion];
       _container.RegisterType<"InterfaceHERE", "CLASSHERE">();
    }

我有30-40个类和接口,我不想将其编码为冗余。有没有办法以最简单的形式编码?就像获取所有类并进行循环并注册它一样?

谢谢!

1 个答案:

答案 0 :(得分:1)

从Unity 3.0开始,您可以使用约定在容器中注册您的实现。请see the details here,代码如下所示。您必须指定要自动注册的类型,方式(选择映射),决定其名称和生命时间。

public class FooRegistry : UnityRegistry
{

    (...)

    Scan(scan =>
    {
            scan.AssembliesInBaseDirectory();
            scan.ForRegistries();
            scan.With<FirstInterfaceConvention>();
            scan.With<AddAllConvention>()
                .TypesImplementing<IHaveManyImplementations>();
            scan.With<SetAllPropertiesConvention>().OfType<ILogger>();
            scan.ExcludeType<FooService>();
    });
}

如果您使用的是Unity 2.0,则必须使用其他软件包,请参阅nuget UnityConfiguration。使用此软件包,您可以扫描实现并自动注册,如下所示,请查看项目文档以获取详细信息:

{{1}}