Unity拦截:如何在不使用Resolve的情况下实例化对象?

时间:2016-06-23 09:48:51

标签: c# unity-container unity-interception

我们希望使用Unity拦截,但我们不知道如何在不使用Unity容器的Resolve-Method 的情况下实例化对象。 为简单起见,在下面的示例中,Unity Container是Program的公共静态字段,因此每个人都可以访问它(我知道它有多丑!):

class Program
{
    // Ugly hack
    public static readonly IUnityContainer Container;

    static void Main(string[] args)
    {
        var service = Container.Resolve<EntityService>();

        // Entity with LazyLoadingInterceptionBehavior
        var entity = service.GetEntity(10);
    }

    static Program()
    {
        Container = new UnityContainer().AddNewExtension<Interception>();
        Container.RegisterType<IEntity, Entity>(new Interceptor<InterfaceInterceptor>(),
            new InterceptionBehavior<LazyLoadingInterceptionBehavior>());
        Container.RegisterType<IEntityService, EntityService>();
    }
}

public interface IEntity
{
    int Id { get; set; }
}

public class Entity : IEntity
{
    public int Id { get; set; }
}

public class EntityService : IEntityService
{
    public IEntity GetEntity(int id)
    {
        // Ugly hack???
        var entity = Program.Container.Resolve<IEntity>();
        entity.Id = id;
        return entity;
    }
}

public interface IEntityService
{
    IEntity GetEntity(int id);
}

如果没有UnityContainer泄漏到EntityService,实现这个的正确方法是什么?这种方法最重要的缺点是什么?

0 个答案:

没有答案