3

试图找到造成这种情况的真正原因却没有太多乐趣!

Type is not resolved for member 'Castle.MicroKernel.Lifestyle.Scoped.CallContextLifetimeScope+SerializationReference,Castle.Windsor, Version=3.1.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc'. 

考虑到我没有在使用这种生活方式的容器中注册任何内容,这看起来像是一个错误。

4

2 回答 2

2

在进行 MSTest 时遇到同样的问题。添加Castle.Windsor.dllGAC对我有用。

gacutil.exe /if "C:\Castle.Windsor.3.1.0\lib\net40\Castle.Windsor.dll"
于 2013-04-22T06:06:20.730 回答
1

我不确定您要做什么,但是如果您的目标是实现一个IDependencyResolver(因为您使用的是范围,所以看起来像这样):

如果你正在实现一个IDependencyResolver,不要试图变得聪明并从你的IDependencyScope实现中继承。从头开始创建解析器。这就是我实现依赖解析器的方式(有效):

public class WindsorDependencyResolver : IDependencyResolver {
    private readonly IWindsorContainer _container;

    public WindsorDependencyResolver(IWindsorContainer container)
    {
        _container = container;
    }

    public IDependencyScope BeginScope()
    {
        return new WindsorDependencyScope(_container);
    }

    public object GetService(Type serviceType)
    {
        return _container.Kernel.HasComponent(serviceType)
                   ? _container.Resolve(serviceType)
                   : null;
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        return _container.ResolveAll(serviceType).Cast<object>();
    }

    public void Dispose()
    {
    }
}

public class WindsorDependencyScope : IDependencyScope {
    private readonly IWindsorContainer _container;
    private readonly IDisposable _scope;
    private bool _disposed;

    public WindsorDependencyScope(IWindsorContainer container)
    {
        _container = container;
        _scope = _container.BeginScope();
    }

    public object GetService(Type serviceType)
    {
        EnsureNotDisposed();
        return _container.Kernel.HasComponent(serviceType)
                   ? _container.Kernel.Resolve(serviceType)
                   : null;
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        EnsureNotDisposed();
        return _container.ResolveAll(serviceType).Cast<object>();
    }

    public void Dispose()
    {
        if(_disposed) return;

        _scope.Dispose();
        _disposed = true;
        GC.SuppressFinalize(this);
    }

    private void EnsureNotDisposed()
    {
        if(_disposed) throw new ObjectDisposedException("WindsorDependencyScope");
    }
}

这是我的第一次尝试(产生了你的错误):

public class WindsorDependencyResolver : WindsorDependencyScope, IDependencyResolver {
    private readonly IWindsorContainer _container;

    public WindsorDependencyResolver(IWindsorContainer container)
        : base(container)
    {
        _container = container;
    }

    public IDependencyScope BeginScope()
    {
        return new WindsorDependencyScope(_container);
    }
}
于 2012-08-11T18:36:33.293 回答