【问题标题】:Unity doesn't resolve my classesUnity 无法解析我的课程
【发布时间】:2014-08-15 11:57:51
【问题描述】:

我在解决方案中有更多项目(主要是类库和一个 WebAPI 项目),并且在 Common 项目中解决该项目内部的依赖项时遇到问题。这是我如何设置依赖项的示例

    [Dependency]
    public IDbContextFactory DbContextFactory
    {
        get { return _factory; }
        set
        {
            _factory = value;
            DbContext = _factory.Create();
        }
    }
    [Dependency]
    public IUnitOfWorkManager Manager
    {
        get { return _manager; }
        set
        {
            _manager = value;
            _manager.AddOpenUnitOfWork(this);
        }
    }

在同一个项目中,我通过此类将接口和类注册到 Unity 容器中

public class CommonUnityConfiguration : IUnityConfiguration
{
    public void Configurate(UnityContainer container)
    {
        container
            .RegisterType<IUnitOfWorkManager, UnitOfWorkManager>()
            .RegisterType<IDbContextFactory, DbContextFactory>();
    }
}

最后在 WebAPI 中我有 WebApiConfiguration,我在其中创建 Unity 容器并注册所有类。

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Create instance for Unity container - let's try to run!
        var container = new UnityContainer();
        container.RegisterType<IUserRepository, UserRepository>(new HierarchicalLifetimeManager());
        config.DependencyResolver = new UnityResolver(container);
        // Add project classes to IoC container
        new CommonUnityConfiguration().Configurate(container);

        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

问题是,IDbContextFactory 属性和 IUnitOfWorkManager 没有解决。你有什么建议,我应该检查什么?

【问题讨论】:

    标签: c# asp.net-web-api dependency-injection unity-container unit-of-work


    【解决方案1】:

    我认为你需要切换这两行:

    config.DependencyResolver = new UnityResolver(container);
    
    new CommonUnityConfiguration().Configurate(container);
    

    在您在 CommonUnityConfiguration 类中完全配置之前,您将 DependencyResolver 设置为 UnityREsolver

    【讨论】:

    • 感谢您的评论,但问题出在监视器和字符之间 - 我。我试图通过调用“new UnitOfWork()”来创建 UnitOfWork 的新实例,但我除外,依赖项将被填充。但后来我意识到,Unity 没有跟踪创建新实例,我不能这样工作......
    猜你喜欢
    • 2019-04-01
    • 2014-09-04
    • 2018-06-10
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    相关资源
    最近更新 更多