1

StartUp.csこのように、ファイルに 依存性注入を作成しようとするクラスがあります

services.AddTransient<IContextFactory<BlogPostContext>, ContextFactory<BlogPostContext>>();

IContextFactoryまた、このようなコンストラクターに the を渡そうとします

public BlogPostRepository(IContextFactory<BlogPostContext> blogPostContext)

しかし、上記の行でエラーが発生します

'BlogPostContext' は、ジェネリック型またはメソッド 'IContextFactory' でパラメーター 'T' として使用するために、パラメーターなしのパブリック コンストラクターを持つ非抽象型である必要があります

new T()インターフェイス宣言で制約として使用しているため、理由はわかりません。

これが私がインスタンス化しようとしているクラスです

public class BlogPostContext
{
    private readonly IMongoDatabase _mongoDatabase;
    private readonly IMongoClient _mongoClient;

    public IMongoCollection<BlogPostModel> BlogPostModelCollection => _mongoDatabase.GetCollection<BlogPostModel>("BlogPostModel");

    public BlogPostContext(IMongoDatabase mongoDatabase, IOptions<MongoDbSettings> settings)
    {
        _mongoDatabase = mongoDatabase;
        _mongoClient = new MongoClient(settings.Value.ConnectionString);
        if (null != _mongoDatabase) _mongoDatabase = _mongoClient.GetDatabase(settings.Value.Database);
    }
} 

汎用インターフェースとその具象実装

namespace FloormindCore.Blog.Factory
{
    public interface IContextFactory<out T> where T : new()
    {
        T Create();
    }
}

using System;

namespace FloormindCore.Blog.Factory
{
    public class ContextFactory<T> : IContextFactory<T> where T : new()
    {
        public T Create()

        {
            return  (T)Activator.CreateInstance(typeof(T));
        }
    }
}
4

1 に答える 1