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の実行中に同じ問題に直面しました。GACCastle.Windsor.dllへの追加は私のために働いた。

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 に答える